1

假设我在我的items控制器中。

好吧,假设我正在执行我的view操作(网址类似于/items/view/10012?date=2013-09-30),其中列出了在给定日期属于客户的项目列表。

我想链接以添加新项目。我会像这样使用 htmlhelper: echo $this->Html('action'=>'add');

在我的add操作中,我有一个表单,其中包含 和 之类的client_id字段item_date

当我在view执行操作时,我知道这些值,因为我在特定日期查看特定客户的项目。我想将这些变量传递给我的add操作,以便它将预填充表单上的这些字段。

如果我在我的link( '?' => array('client_id'=>$client_id)) 中添加一个查询字符串,它会中断添加操作,因为如果请求不是 POST,它将给出错误。如果我使用 aform->postLink我会得到另一个错误,因为添加操作的 POST 数据只能用于添加记录,而不是传递数据以预填充表单。

我基本上想让view页面上的链接将这两个变量传递给add控制器​​中的操作,这样我就可以定义一些变量来预填充表单。有没有办法做到这一点?

这是我的add控制器代码。它的内容可能与我上面的问题有所不同,因为我试图稍微简化问题,但这个概念仍然应该适用。

public function add(){
    if ($this->request->is('post')) {
        $this->Holding->create();
        if ($this->Holding->save($this->request->data)) {
            $this->Session->setFlash(__('Holding has been saved.'), 'default', array('class' => 'alert alert-success'));
            return $this->redirect(array('action' => 'index'));
        }
        $this->Session->setFlash(__('Unable to add your holding.'), 'default', array('class' => 'alert alert-danger'));
    }
    $this->set('accounts', $this->Holding->Account->find('list'));
        $sedol_list = $this->Holding->Sedol->find('all', array(
            'fields' => array(
                'id', 'sedol_description'
                ),
            'recursive' => 0,
            'order'  => 'description'
            )
        );
        $this->set('sedols', Hash::combine($sedol_list, '{n}.Sedol.id', '{n}.Sedol.sedol_description') );
}
4

1 回答 1

4

为什么不使用正确的 Cake URL 参数?

echo $this->Html->link('Add Item', array(
    'action' => 'add',
    $client_id,
    $item_date
));

这将为您提供一个更好的 URL,例如:

http://www.example.com/items/add/10012/2013-09-30

然后在您的控制器中,修改函数以接收这些参数:

public function add($client_id, $item_date) {

    // Prefill the form on this page by manually setting the values
    // in the request data array. This is what Cake uses to populate
    // the form inputs on your page.
    if (empty($this->request->data)) {

        $this->request->data['Item']['client_id'] = $client_id;
        $this->request->data['Item']['item_date'] = $item_date;

    } else {

        // In here process the form data normally from when the
        // user has submitted it themselves...

    }

}
于 2013-10-22T12:24:17.903 回答