Yii2:如何从视图向控制器发送新变量?

时间:2017-09-10 17:47:56

标签: php model-view-controller yii2 yii2-advanced-app

我有一个名为的表, id 名称字段。

我有一个 create.php 视图,可以加载名为 Persons 的模型,现在我想添加一个名为 hasCar 的复选框来显示一个人有车(所以这是一个布尔条件)。

然后我有发送按钮,将表单 $ model 数组发送到控制器,所以我需要添加 hasCar 变量为 $ model 数组。

但是复选框不是人员表的列,所以我遇到了一些错误,因为它不是模型的一部分。

我以这种方式添加了复选框,但当然不能正常工作。

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

是否可以在 $ model 数组中发送 hasCar 变量?我的意思是,当按下发送按钮时,如何将 hasCar 变量发送到控制器?

2 个答案:

答案 0 :(得分:2)

创建一个新模型,扩展包含hasCar成员的Person,并从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',
        ]);
    }      
}

答案 1 :(得分:1)

你不能将变量传递给$ model对象轨道附属于db表,你是对的。您需要通过请求方法(GET,POST)将变量传递给控制器​​。

尝试:

Yii::$app->request->post()

用于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的更多信息: enter link description here

我希望这个答案能够覆盖你。

达米安