Как передать файлы REST API yii2?

183
21 января 2019, 22:10

Нужно оформить отправку и сохранение файлов (изображений) на сервере с помощью метода 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;
}
Answer 1

Решение:

поменял это 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;
}
READ ALSO
Wordpress Ошибка “Error establishing a database connection”

Wordpress Ошибка “Error establishing a database connection”

Упал сайтНа главной и на стороне админки "Error establishing a database connection" В wp-config

161
Вывод переменной в середине текста MessageBox

Вывод переменной в середине текста MessageBox

В char WindowText[4096] хранится заголовок окна (не окна с сообщением), полученный при помощи GetWindowTextКогда я пытаюсь сделать так:

148
с++: возвращение типа, а не переменной

с++: возвращение типа, а не переменной

Подскажите (что-то не могу найти, хотя точно помню, что такая элементарная вещь в C++ была) как вернуть не переменную, а ее тип, который я дальше...

143