0

我想有条件地将 GET 参数添加到 CakePHP 中的表单操作,但默认操作行为似乎覆盖了我希望将其设置为的内容:

我试过这个,结果$formaction是我想要的表单操作,除了:

$formaction = '/edit/'.$this->data['Shipment']['id'];
$formaction = isset($trace_param)? '?trace_action='.$trace_action.'&trace_param='.$trace_param : '';

echo $this->Form->create('Shipment', array('action'=> $formaction ));

这导致动作是shipments/shipments/edit/7101?trace_action=scheduled_shipments&trace_param=2013-03-18/7101

所以我尝试将模型设置为 null.. 但它总是将货件 ID 附加到表单操作的末尾。我还尝试<form>在 html 中对标签进行硬编码,但这会导致数据不在提交的表单中。当我把它放回原来的echo $this->Form->create('Shipment');时候,它又可以工作了。

是否有可靠的方法将获取参数附加到 Cake 中的表单?(本站使用1.3.7版本)

4

1 回答 1

2

行动!= 网址

如果设置了action,那就是控制器动作,即:

/controller_name/<this bit>/other/args

要明确设置表单将提交到的 url,请使用urlkey

echo $this->Form->create('Shipment', array('url'=> $formaction));

不要将 url 作为字符串操作

Cake 中的 Url 通常定义为数组,它们更灵活且更易于使用。问题中的url可以写成:

$formaction = array(
    'action' => 'edit',
    $this->data['Shipment']['id']
);

if ($trace_param) {
    $formaction['?'] = array(
        'trace_action' => $trace_action
        'trace_param' => $trace_param

    )
}

echo $this->Form->create('Shipment', array('url'=> $formaction));

或者只是使用隐藏的表单输入

这通常使生活变得非常简单:

echo $this->Form->create('Shipment');
if ($trace_param) {
    echo $this->Form->hidden('trace_action', array('value' => $trace_action));
    echo $this->Form->hidden('trace_param', array('value' => $trace_param));
}
于 2013-07-09T20:51:12.800 回答