2016-02-21 5 views
0

я определил виртуальный атрибут:Атрибут Yii2 не-DB (или виртуальный) не заполняется во время массового присвоения?

class ContactForm extends Model { 

    public $name; // is not a DB field 

Я заметил, что она не заполняется во время массированного присвоения (после отправки формы, в $model->load($_POST)). Может ли это быть каким-то образом заполнено вместе с атрибутами БД? Или я делаю что-то неправильно, что не заселено, но это должно быть? Благодаря!

+1

Вы пытались присвоить атрибуты модели $ model-> load (Yii :: $ app-> request-> post())? – WeSee

+0

Какая разница с '$ model-> load ($ _ POST)'? – user2511599

+0

Глядя на '' 'https: // github.com/yiisoft/yii2/blob/master/framework/web/Request.php # L453''' в обычной форме, возможно, (?) Нет разницы, но это Yii2-способ делать вещи. Если у вас есть запрос '' 'application/json''', есть различия. – WeSee

ответ

2

Docs: Massive Assignments

Как и обычные модели, активные экземпляры записи также пользуются массивной функцией назначения. С помощью этой функции вы можете назначать значения нескольким атрибутам экземпляра Active Record в одном выражении PHP, как показано ниже. Помните, что только безопасные атрибуты могут быть назначены в массовом порядке.

Docs: Safe Attributes

По этой причине, специальный валидатор псевдонимами сейф предоставляется, так что вы можете объявить атрибут безопасным без фактического подтверждения его. Например, следующие правила объявляют, что оба заголовка и описания являются безопасными атрибутами.

Вы должны сделать какую-то проверку на свой атрибут, если у вас нет каких-либо требований к валидации - определите его как safe.

public function rules() 
{ 
    return [ 
     [['name'], 'safe'], 
    ]; 
} 
+0

Сумасшедший! Оно работает! Меня удивляет, почему мы не становимся предупреждением или сообщением об ошибке. Что нибудь. Но все в порядке. – user2511599