Нужно оформить отправку и сохранение файлов (изображений) на сервере с помощью метода POST (и PUT (или PATCH, есть вообще разница? (и если есть, то какая?)), но сначала хочу разобраться с POST).
Сейчас делаю так, но это не работает:
public function actions()
{
$actions = parent::actions();
unset($actions['delete'], $actions['put']);
unset($actions['create']);
return $actions;
}
public function actionCreate()
{
$model = new $this->modelClass;
$juxtapose = new Juxtapose();
if ($model->save()){
$juxtapose->loadImages($model->id);
}
return "error";
return new ActiveDataProvider ([
'query' => Product::find()->where(['id' => $model->id])
]);
}
...хотя до "error" доходит.
Есть готовые методы в модели, которые обрабатывают файл и сохраняют на диск (loadImages), но как их принимать в контроллере?
public function loadImages($id)
{
$this->image = UploadedFile::getInstancesByName('image');
if (!$this->image || !$this->validate()) {
return false;
}
foreach ($this->image as $image) {
static::newImages($id, $image);
}
return true;
}
Решение:
поменял это getInstances($this, 'image'); на это getInstancesByName('image'); и все заработало.
так же переписал экшен :
public function actionCreate()
{
$model = new $this->modelClass;
$model->load(Yii::$app->getRequest()->getBodyParams(), '');
if ($model->save()) {
$model->loadImages();
}
return new ActiveDataProvider ([
'query' => Product::find()->where(['id' => $model->id])
]);
}
и метод класса, после перемещения в модель product :
public function loadImages()
{
$this->image = UploadedFile::getInstancesByName('image');
if (!$this->image || !$this->validate()) {
return false;
}
foreach ($this->image as $image) {
Juxtapose::newImages($this->id, $image);
}
return true;
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости