Yii2: объединение FileInput от Kartik и DetailView от Kartik

Я пытаюсь загрузить один файл, используя FileInput от Kartik.

Все идет хорошо, когда вы делаете это через стандартную форму создания, так как следующее возвращает non-null:

$filedata = UploadedFile::getInstance($model, 'filedata'); 

Однако он всегда возвращает null при входе в DetailView Картика в режиме редактирования и попытке обновить файл.

В view.php у меня есть:

[
    'attribute' => 'filedata',
    'visible' => Yii::$app->user->can('doIt'),
    'type' => DetailView::INPUT_FILEINPUT,
    'rowOptions' => ['class' => 'kv-view-hidden'],
    'widgetOptions' => ['options' => ['accept' => 'application/pdf'],
    'pluginOptions' => [
        'showUpload' => false,
        'allowedFileExtensions' => ['pdf'],
        'initialCaption' => $model->filename,
    ],
    'pluginEvents' => [
        'filecleared' => <whatever>,
        'fileloaded'  => <whatever>,
    ],
  ],
],   

в то время как в _form.php (что работает):

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>

    <?= $form->field($model, 'filedata')->widget(FileInput::classname(), [
        'options' => ['accept' => 'application/pdf'],
        'pluginOptions' => [
            'showUpload' => false,
            'allowedFileExtensions' => ['pdf'],
            'initialCaption' => $model->getOldAttribute('filename'),
        ],
        'pluginEvents' => [
            'filecleared' => <whatever>,
            'fileloaded'  => <whatever>,
        ],
    ]) 
?>

Любые идеи? (Кстати, не знаю, нужен ли 'multipart/form-data' как-то в view.php, как и в _form.php, поэтому любой, кто подтвердит это и расскажет некоторые подробности, приветствуется).


person Antonio López    schedule 03.01.2017    source источник


Ответы (1)


Конечно, multipart/form-data необходимы как в _form.php, так и в view.php, а именно:

'formOptions' => ['options' => ['enctype' => 'multipart/form-data']],
'attributes' => [
...
[
    'attribute' => 'filedata',
    'visible' => Yii::$app->user->can('doIt'),
    'type' => DetailView::INPUT_FILEINPUT,
    'rowOptions' => ['class' => 'kv-view-hidden'],
    'widgetOptions' => ['options' => ['accept' => 'application/pdf'],
    'pluginOptions' => [
        'showUpload' => false,
        'allowedFileExtensions' => ['pdf'],
        'initialCaption' => $model->filename,
    ],
    'pluginEvents' => [
        'filecleared' => <whatever>,
        'fileloaded'  => <whatever>,
    ],
  ],
],
....
]   
person Antonio López    schedule 13.01.2017