@OlegBas1996

Ошибка загрузки данных из массива $_POST в model?

Здравствуйте! После загрузки данных из массива $_POST Загружаю данные через $model->load(Yii::$app->request->post()) возникла проблема. После загрузки данных атрибуты id_sec и is_show заполняются старыми данными, хотя в Yii::$app->request->post() содержатся новые данные, приходится писать такой костыль
$model->id_sec = Yii::$app->request->post("News")["id_sec"];
$model->is_show = Yii::$app->request->post("News")["is_show"];

Подскажите как решить проблему, не используя костыль?
  • Вопрос задан
  • 93 просмотра
Пригласить эксперта
Ответы на вопрос 2
@Arik
Подозреваю что у вас эти атрибуты не прописаны в rules, нужно хотя бы указать safe
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Допишите в правила rules проверку свойств id_sec, is_show и удалите эти две строки
$model->id_sec = Yii::$app->request->post("News")["id_sec"];
 $model->is_show = Yii::$app->request->post("News")["is_show"];

Подозреваю, что значения должны быть целыми числами, значит в rules должно быть такое правило,
[['id_sec', 'is_show'], 'integer']
Совместить можно с этим правилом ['multiplier','integer'],
Так же читайте документацию.

p.s.
Далее, что это за бред?
$model->created_at = time();
 $model->count_show = 0;
 $model->count_clicks = 0;
 $model->is_news = 1;

Для первой строки, чтобы вставить время создания записи или редактирования, существует TimestampBehavior. Необходимо в модель добавить следующее:
public function behaviors()
    {
        return [
            TimestampBehavior::className()
        ];
    }

и удалить из действия строку $model->created_at = time();
Для остальных трёх строк. Это Вы пытаетесь задать значения по умолчанию или присваиваете новые значения?
Если значения по умолчанию, то это делается тоже в правилах rules:
['cout_show', 'count_click'], 'default', 'value' => 0]
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы