【问题标题】:How do I turn a form into a link in Yii?在 Yii 中如何将表单变成链接?
【发布时间】:2015-03-24 19:07:22
【问题描述】:

这就是我现在拥有的:

<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] => )

【问题讨论】:

  • 为什么需要型号名称?抱歉,你为什么需要这样的链接??
  • Model::load() 使用模型名称:$model-&gt;load(Yii::$app-&gt;request-&gt;get())。链接是可共享的。您不能分享表单发布的结果。

标签: php yii yii2


【解决方案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

【讨论】:

  • 那是提供像/aa/web/index.php?r=shopping/search&amp;1[q]=toaster&amp;1[sort]=priceHigh 这样的链接。似乎Url::to 在其中插入了1,或者一些随机数。这种方式也不允许在同一页面上显示多个表单,因此会更具限制性。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-14
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多