Yii2: как отправить новую переменную из вида в контроллер?
У меня есть таблица под названием persons с id и name полями.
У меня есть создать.php view, который загружает модель под названием Persons, и теперь я хочу добавить флажок под названием hasCar, чтобы показать, есть ли у человека автомобиль (так что это логическое условие).
Затем у меня есть кнопка send , которая отправляет массив $model формы в контроллер, поэтому мне нужно добавить переменную hasCar в $model массив.
Но флажок не является столбцом таблицы persons, поэтому я получил некоторые ошибки, потому что он не является частью модели.
Я добавил флажок таким образом, но он, конечно, не работает.
<?= $form->field($model, 'hasCar')->checkbox(); ?>
Можно ли отправить переменную hasCar в массив $model? Я имею в виду, как я могу отправить переменную hasCar контроллеру, когда нажата кнопка send?
2 ответов:
Вы не можете передать переменную объекту $model, который связан с таблицей БД, вы правы в этом. Вам нужно передать переменную контроллеру с помощью метода запроса (GET, POST).
Попробуйте :
Yii::$app->request->post()Для должности, и:
Yii::$app->request->get()Для GET.
Также на форме добавьте флажок в качестве компонента класса HTML.
Пример:
Контроллер:
... $hasCar = Yii::$app->request->post('hasCar'); ....Вид:
... // We use ActiveFormJS here $this->registerJs( $('#my-form').on('beforeSubmit', function (e) { if (typeof $('#hasCar-checkbox').prop('value') !== 'undefined') { return false; // false to cancel submit } return true; // true to continue submit }); $this::POS_READY, 'form-before-submit-handler' ); ... <?= HTML::checkbox('hasCar', false, ['id' => 'hasCar-checkbox', 'class' => 'form-control']) ?> ...Подробнее об ActiveFormJS: Введите описание ссылки здесь
Я надеюсь, что этот ответ охватил вас.
Дамиан
Создайте новую расширяющую модель Person, содержащую член hasCar, и загрузите модель из класса PersonForm, например:
class PersonForm extends Person { public $hasCar; public function rules() { return array_merge(parent::rules(), [ [['hasCar'], 'safe'], ]); } public function attributeLabels() { return array_merge(parent::attributeLabels(), [ 'hasCar' => 'Has car', ]); } }
Comments