Я пытаюсь заставить файл загружаться так же, как существующий, поэтому я попытался посмотреть, как он работает. Исходная функция загрузки просто вызывает URL (site.com/model/upload/model_id), а затем выбранный файл сохраняется на сервере. Кроме этого, он отображается точно так же, как и в модельном представлении (site.com/model/model_id)
Видя это, я начал просматривать все файлы сервера. Нет ни одного файла с именем upload, нет никаких других упоминаний об этом URL, и даже ничего в контроллере сайта. Единственное, что я нашел, было в модели контроллера:
public function actionUpload($id) {
$model = new Model();
$model->file = UploadedFile::getInstance($model, 'file');
if ($model->file) {
$path = 'uploads/documents/'. $id .'/';
FileHelper::createDirectory($path);
$model->file->saveAs($path . $model->file->baseName . '.' . $model->file->extension);
}
return $this->render('view', ['model' => $this->findModel($id)]);
}
Как это работает? Я попытался скопировать его с копией этой функции с другим именем, но это просто выдает мне ошибку «страница не найдена».
Код для загрузки документа в представлении такой:
<?php $form = ActiveForm::begin(['action' => \yii\helpers\Url::to(['upload', 'id' => $model->id]), 'options' => ['enctype' => 'multipart/form-data']]) ?>
<?= $form->field($model, 'file')->fileInput(['style' => ''])->label(false) ?>
<?= Html::submitButton('Upload', ['class' => 'btn-success']) ?>
<?php ActiveForm::end() ?>
Редактирование: решается добавлением логического параметра в функцию actionUpload.