Yii2: как отправить новую переменную из вида в контроллер?



У меня есть таблица под названием persons с id и name полями.



У меня есть создать.php view, который загружает модель под названием Persons, и теперь я хочу добавить флажок под названием hasCar, чтобы показать, есть ли у человека автомобиль (так что это логическое условие).



Затем у меня есть кнопка send , которая отправляет массив $model формы в контроллер, поэтому мне нужно добавить переменную hasCar в $model массив.



Но флажок не является столбцом таблицы persons, поэтому я получил некоторые ошибки, потому что он не является частью модели.

Я добавил флажок таким образом, но он, конечно, не работает.



<?= $form->field($model, 'hasCar')->checkbox(); ?>


Можно ли отправить переменную hasCar в массив $model? Я имею в виду, как я могу отправить переменную hasCar контроллеру, когда нажата кнопка send?

1295   2  

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

    Ничего не найдено.