如何在Yii中将表单转换为链接?

时间:2015-03-24 19:07:22

标签: php yii yii2

这就是我现在所拥有的:

<a href="<?= Url::to([null, 'Shopping[q]'=>$model->q, 'Shopping[view]'=>$model->view, 'Shopping[sort]'=>'priceLow'])?>">

但是当我添加更多链接和更多字段时,我必须更新每个和更多字段。每个环节。我正在寻找像我在Rails中所做的那样,你可以列出所有属性并更新其中一个属性。

link_to 'action', model.attributes.merge{sort: 'priceLow'}

我找不到如何获取带有表单名称的属性数组。

http://www.yiiframework.com/doc-2.0/yii-base-model.html

Model::getAttributes()Model::toArray()不包含表单/型号名称作为键的一部分。

<? print_r($model->getAttributes()) ?>
Array ( [q] => toaster [sort] => [view] => )

2 个答案:

答案 0 :(得分:1)

你应该试试:

<a href="<?= Url::to(array_merge([null], $model->getAttributes()) ?>">

在你的控制器中:

$model->load(Yii::$app->request->get(), '');
  

如果formName()为空,则整个$ data数组将用于填充模型。

了解详情:http://www.yiiframework.com/doc-2.0/yii-base-model.html#load()-detail

答案 1 :(得分:0)

好的,我找到了一种方法来保留表单名称并合并新参数,这样你就可以在同一页面上有多个表单,但我会标记另一个答案,因为我可能会使用它,因为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 '';
}