Yii2:如何将新变量从视图发送到控制器?
Yii2: How to send new variable from view to controller?
我有一个名为 persons 的 table,其中包含 id 和 name 字段.
我有一个 create.php 视图加载名为 Persons 的模型,现在我想添加一个名为 hasCar 显示一个人是否有车(所以这是一个布尔条件)。
然后我有 send 按钮发送 $model 数组 form到控制器,所以我需要将 hasCar 变量添加到 $model 数组。
但是复选框不是 persons table 的列,所以我得到了一些错误,因为它不是模型的一部分。
我以这种方式添加了复选框,但它当然不起作用。
<?= $form->field($model, 'hasCar')->checkbox(); ?>
是否可以在 $model 数组中发送 hasCar 变量?我的意思是,当按下 send 按钮时,如何将 hasCar 变量发送到控制器?
新建一个包含hasCar成员的Person扩展模型,并从PersonFormclass加载模型,例如:
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',
]);
}
}
您不能将变量传递给 $model 对象 orbit 附属于数据库 table,您说得对。您需要通过请求方法(GET,POST)将变量传递给控制器。
尝试:
Yii::$app->request->post()
对于 POST,以及:
Yii::$app->request->get()
对于 GET。
还在表单上添加复选框作为 HTML class 组件。
示例:
控制器:
...
$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
我希望这个答案涵盖了你。
达米安
我有一个名为 persons 的 table,其中包含 id 和 name 字段.
我有一个 create.php 视图加载名为 Persons 的模型,现在我想添加一个名为 hasCar 显示一个人是否有车(所以这是一个布尔条件)。
然后我有 send 按钮发送 $model 数组 form到控制器,所以我需要将 hasCar 变量添加到 $model 数组。
但是复选框不是 persons table 的列,所以我得到了一些错误,因为它不是模型的一部分。
我以这种方式添加了复选框,但它当然不起作用。
<?= $form->field($model, 'hasCar')->checkbox(); ?>
是否可以在 $model 数组中发送 hasCar 变量?我的意思是,当按下 send 按钮时,如何将 hasCar 变量发送到控制器?
新建一个包含hasCar成员的Person扩展模型,并从PersonFormclass加载模型,例如:
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',
]);
}
}
您不能将变量传递给 $model 对象 orbit 附属于数据库 table,您说得对。您需要通过请求方法(GET,POST)将变量传递给控制器。
尝试:
Yii::$app->request->post()
对于 POST,以及:
Yii::$app->request->get()
对于 GET。
还在表单上添加复选框作为 HTML class 组件。
示例:
控制器:
...
$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
我希望这个答案涵盖了你。
达米安