Загрузка данных в модель

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Загрузка данных в модель

Сообщение Brainfuck »

Есть например такая модель:

Код: Выделить всё

<?php

class MyForm extends Model {
    public $name, $email;

    public function init() {
        if (\Yii::$app->user->can('editor'))
            $this->scenario = 'editor';
    }

    public function rules() {
        return [
            [['name', 'email'], 'safe'],
            [['name', 'email'], 'required'],
            ['name', 'string'],
            ['email', 'email'],
        ];
    }

    public function scenarios() {
        return [
            self::SCENARIO_DEFAULT => $this->attributes(),
            'editor' => ['email'],
        ];
    }
}
Я загружаю полученные из запроса данные с активным сценарием editor:

Код: Выделить всё

$form->load(Yii::$app->request->post())
Но на выходе получаю заполненным только поле email, хотя name тоже было в запросе!!! Мне нужно лишь чтобы оно было необязательным для редактора, но оно все равно должно грузиться и сохраняться если указано! Почему так происходит? Я даже вон специально указал для обоих полей safe правило и все равно не помогает.
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Загрузка данных в модель

Сообщение andku83 »

Код: Выделить всё

    public function rules() {
        return [
            [['email'], 'required'],
            [['name'], 'required', 'on' => [self::SCENARIO_DEFAULT]],
            ['name', 'string'],
            ['email', 'email'],
        ];
    }
Brainfuck
Сообщения: 313
Зарегистрирован: 2018.02.19, 14:20

Re: Загрузка данных в модель

Сообщение Brainfuck »

andku83 писал(а): 2018.12.19, 17:20

Код: Выделить всё

    public function rules() {
        return [
            [['email'], 'required'],
            [['name'], 'required', 'on' => [self::SCENARIO_DEFAULT]],
            ['name', 'string'],
            ['email', 'email'],
        ];
    }
Погодите, я знаю про такой способ, но разве не для того же существуют сценарии? Просто сценариев на самом деле побольше одного и в правилах это все неудобно писать.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Загрузка данных в модель

Сообщение maleks »

а так?

Код: Выделить всё

        return [
            self::SCENARIO_DEFAULT => $this->attributes(),
            'editor' => ['email', '!name'],
        ];
andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Загрузка данных в модель

Сообщение andku83 »

Brainfuck писал(а): 2018.12.19, 17:23 Погодите, я знаю про такой способ, но разве не для того же существуют сценарии? Просто сценариев на самом деле побольше одного и в правилах это все неудобно писать.
https://yiiframework.com.ua/ru/doc/guid ... #scenarios
Метод scenarios() возвращает массив, ключами которого являются имена сценариев, а значения - соответствующие активные атрибуты. Активные атрибуты могут быть массово присвоены и подлежат валидации.
Вышесказанное говорит о том что если атрибута нет в этом списке то его нельзя загрузить через ->load()
Ответить