我如何在 Yii 中将表单变成 link?
How do I turn a form into a link in Yii?
这是我现在拥有的:
<a href="<?= Url::to([null, 'Shopping[q]'=>$model->q, 'Shopping[view]'=>$model->view, 'Shopping[sort]'=>'priceLow'])?>">
但是当我添加更多 link 和更多字段时,我必须更新每个 link。我正在寻找类似我在 Rails 中所做的事情,您可以在其中列出所有属性并更新其中之一。
link_to 'action', model.attributes.merge{sort: 'priceLow'}
我找不到如何获取其中包含表单名称的属性数组。
http://www.yiiframework.com/doc-2.0/yii-base-model.html
Model::getAttributes()
或 Model::toArray()
不包含 form/model 名称作为键的一部分。
<? print_r($model->getAttributes()) ?>
Array ( [q] => toaster [sort] => [view] => )
你应该试试:
<a href="<?= Url::to(array_merge([null], $model->getAttributes()) ?>">
在你的控制器中:
$model->load(Yii::$app->request->get(), '');
If formName() is empty, the whole $data array will be used to populate the model.
阅读更多:http://www.yiiframework.com/doc-2.0/yii-base-model.html#load()-detail
好的,我找到了一种方法来保留表单名称并合并新参数,这样您就可以在同一页面上拥有多个表单,但我会标记另一个答案,因为我可能会使用它,因为 URL 是清洁工,我只需要一张表格。
<? print_r([null, 'Shopping'=>$model->getAttributes()]) ?><br/>
<? print_r([null, 'Shopping'=>array_merge($model->getAttributes(), ['sort'=>'priceLow'])]) ?><br/>
<?= Url::to([null, 'Shopping'=>array_merge($model->getAttributes(), ['sort'=>'priceLow'])]) ?><br/>
会产生
Array ( [0] => [Shopping] => Array ( [q] => toaster [sort] => priceHigh [view] => ) )
Array ( [0] => [Shopping] => Array ( [q] => toaster [sort] => priceLow [view] => ) )
/aa/web/index.php?r=shopping%2Fsearch&Shopping%5Bq%5D=toaster&Shopping%5Bsort%5D=priceLow
注意到 'sort' 参数被覆盖了吗?如果要泛化的话可以用
<?= Url::to([null, $model->formName() => $model->attributes]) ?><br/>
下面是如何使用带覆盖的简化参数。
<?= Url::to(array_merge([null], $model->getAttributes(), ['sort'=>'priceLow'])) ?>
但是你必须更改 Model::formName()
因为在生成输入字段等表单元素时,它会根据模型命名它们。
public function formName() {
return '';
}
这是我现在拥有的:
<a href="<?= Url::to([null, 'Shopping[q]'=>$model->q, 'Shopping[view]'=>$model->view, 'Shopping[sort]'=>'priceLow'])?>">
但是当我添加更多 link 和更多字段时,我必须更新每个 link。我正在寻找类似我在 Rails 中所做的事情,您可以在其中列出所有属性并更新其中之一。
link_to 'action', model.attributes.merge{sort: 'priceLow'}
我找不到如何获取其中包含表单名称的属性数组。
http://www.yiiframework.com/doc-2.0/yii-base-model.html
Model::getAttributes()
或 Model::toArray()
不包含 form/model 名称作为键的一部分。
<? print_r($model->getAttributes()) ?>
Array ( [q] => toaster [sort] => [view] => )
你应该试试:
<a href="<?= Url::to(array_merge([null], $model->getAttributes()) ?>">
在你的控制器中:
$model->load(Yii::$app->request->get(), '');
If formName() is empty, the whole $data array will be used to populate the model.
阅读更多:http://www.yiiframework.com/doc-2.0/yii-base-model.html#load()-detail
好的,我找到了一种方法来保留表单名称并合并新参数,这样您就可以在同一页面上拥有多个表单,但我会标记另一个答案,因为我可能会使用它,因为 URL 是清洁工,我只需要一张表格。
<? print_r([null, 'Shopping'=>$model->getAttributes()]) ?><br/>
<? print_r([null, 'Shopping'=>array_merge($model->getAttributes(), ['sort'=>'priceLow'])]) ?><br/>
<?= Url::to([null, 'Shopping'=>array_merge($model->getAttributes(), ['sort'=>'priceLow'])]) ?><br/>
会产生
Array ( [0] => [Shopping] => Array ( [q] => toaster [sort] => priceHigh [view] => ) )
Array ( [0] => [Shopping] => Array ( [q] => toaster [sort] => priceLow [view] => ) )
/aa/web/index.php?r=shopping%2Fsearch&Shopping%5Bq%5D=toaster&Shopping%5Bsort%5D=priceLow
注意到 'sort' 参数被覆盖了吗?如果要泛化的话可以用
<?= Url::to([null, $model->formName() => $model->attributes]) ?><br/>
下面是如何使用带覆盖的简化参数。
<?= Url::to(array_merge([null], $model->getAttributes(), ['sort'=>'priceLow'])) ?>
但是你必须更改 Model::formName()
因为在生成输入字段等表单元素时,它会根据模型命名它们。
public function formName() {
return '';
}