我想有条件地将一个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)
答案 0 :(得分:2)
如果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));
}