Я использую виджет kartik yii2-widget-fileinput. Во вью вставил следующий код:
<?= $form->field($model, 'photo')->widget(FileInput::classname(),['options' => ['accept' => '@yii/files/*'],'pluginOptions' => ['uploadUrl' => Url::to(['/candidate/create']),],]); ?>
Контроллер:
$modelFileWidget = new \frontend\models\forms\UploadForm();
$modelFileWidget->photo = UploadedFile::getInstance($modelFileWidget, 'photo');
Yii::$app->response->format = Response::FORMAT_JSON;
if ($modelFileWidget->upload()) {
return ['error' => null];
}
return $this->render('create',[
'model' => $form,
'modelFileWidget'=> $modelFileWidget,
'cities' => ArrayHelper::map($this->cityService->getAll(),'id','name'),
'skills' => ArrayHelper::map($this->skillService->getAll(),'id','name'),
]);
Модель:
class UploadForm {
/**
* @var UploadedFile
*/
public $photo;
public function rules()
{
return [
[['photo'], 'file', 'skipOnEmpty' => true, 'extensions' => ['jpg', 'png']],
];
}
public function upload()
{
if ($this->validate()) {
$this->photo->saveAs(Yii::getAlias('@app').'/web/img/' . $this->photo->baseName . '.' . $this->photo->extension);
return true;
} else {
return false;
}
}
}
В результате загрузки файла получаю следующее сообщение об ошибке:
Exception 'Error' with message 'Call to undefined method frontend\models\forms\UploadForm::formName()'
Я нашел решение похожего вопроса, но так и не понял как его применить work with uploaded file in yii2 Заранее спасибо за ответы!
В сообщении об ошибке у вас написано, что не найден метод formName(), который в свою очередь находится в классе yii\base\Model. Вероятно вы забыли отнаследоваться от этого родительского класса в UploadForm.
namespace frontend\models\forms;
use yii\base\Model;
class UploadForm extends Model
{
//..
}
Продвижение своими сайтами как стратегия роста и независимости