Cake PHP将get参数添加到表单中

时间:2013-07-09 20:33:37

标签: forms cakephp post get

我想有条件地将一个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附加到表单操作的末尾。我还尝试在html中对<form>标记进行硬编码,但这导致数据不在提交的表单中。当我把它放回原来的echo $this->Form->create('Shipment');时,它再次起作用。

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

1 个答案:

答案 0 :(得分:2)

action!= url

如果action key设置为控制器动作,即:

/controller_name/<this bit>/other/args

要明确设置表单将提交的网址,请使用url key

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

不要将网址操作为字符串

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

$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));
}