解决Router带prefix时,formHelper Create的问题

edited 十月 2013 in CakePHP
(顺便说一下重大消息:cake出稳定版了^_^)
Router代码如下:

1. Router::connect('/admin/:controller/:action/*', array('prefix' => 'admin', 'admin' => true));

当表单Add时候,也就是

1. $form->create('Model', array('url' => array('admin' => true)));

生成的代码是/admin/models/add,正是所期望的。

但是表单为编辑时,也就是$this->data填充了$form表单值后,问题就出来了,同样上面的create代码,生成的结果却为/models/edit/{id}/admin:1。

这显然不是我们所要的,正确应当为/admin/models/edit/{id}。

这个问题困扰了我很久,一直找不出十分完美的解决方案。

起先采用更改$form->create时,url写成绝对路径,如

1. $form->create('Model', array('url' => Router::url(array('action' => 'admin_edit', 'admin' => true, $form->value('Model.id')))));

但是实在是别扭,总感觉没达到cake懒人的要求。

后来,翻了formHelper源码,貌似当表单为编辑时,url里,会自动多出个参数(named)id。

大概源码如下:

1. ......
2. if ($recordExists) {
3. $created = true;
4. $id = $this->data[$model][$data];
5. }
6. ......
7. $actionDefaults = array(
8. 'plugin' => $this->plugin,
9. 'controller' => $view->viewPath,
10. 'action' => $options,
11. 'id' => $id
12. );

所以问题就来了,因为我的路由规则是

1. Router::connect('/admin/:controller/:action/*', array('prefix' => 'admin', 'admin' => true));

是不带named形式参数的。所以,上面编辑表单时的url路径当然就不匹配了。

在此规则后,再添加如下规则

1. Router::connect('/admin/:controller/:action/:id', array('prefix' => 'admin', 'admin' => true));

一切完美……http://www.71151461.cn/articles/view/35

原始討論: http://twpug.net/x/modules/newbb/viewtopic.php?topic_id=3828

評論

Sign In or Register to comment.