• Main navigation
登入區塊
帳號:

密碼:

記住我



忘記密碼?

現在註冊!
網站資訊區塊
站務管理者

kiang
 

tokimeki
 

sam0228
 

morris
 

shiang
 

SoltyRain
 

廣告





解决Router带prefix时,formHelper Create的问题
Just popping in
註冊日期:
2008/12/19 9:24
文章: 9
(顺便说一下重大消息: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['key']];
5. }
6. ......
7. $actionDefaults = array(
8. 'plugin' => $this->plugin,
9. 'controller' => $view->viewPath,
10. 'action' => $options['action'],
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

發表日期:2008/12/28 11:31
應用擴展 工具箱


回覆: 解决Router带prefix时,formHelper Create的问题
網站管理員
註冊日期:
2004/3/23 17:40
來自 Taipei, Taiwan
文章: 6199
不太懂為何要設這樣的規則,在 config/core.php 中設定 Configure::write('Routing.admin', 'admin'); 時就會自動處理不是嘛?

發表日期:2008/12/29 8:47
_________________
****************************************************
Finjon Kiang / 江明宗
Just This Computer Studio / 就這間電腦工作室
Website: http://olc.tw
****************************************************
應用擴展 工具箱


回覆: 解决Router带prefix时,formHelper Create的问题
Just popping in
註冊日期:
2008/12/19 9:24
文章: 9
routing.admin路由只能设置一个呀。但是prefix不同,按所需我可以分配如超级管理员后台superuser_... 普通管理员后台admin_...,会员后台member_...等等。然后可以对每个prefix进行不同的权限控制

發表日期:2008/12/29 21:57
_________________
CAKEPHP教程:http://www.71151461.cn
應用擴展 工具箱


回覆: 解决Router带prefix时,formHelper Create的问题
網站管理員
註冊日期:
2004/3/23 17:40
來自 Taipei, Taiwan
文章: 6199
只是,用 plugin 的架構會不會單純些? :)

發表日期:2008/12/29 22:18
_________________
****************************************************
Finjon Kiang / 江明宗
Just This Computer Studio / 就這間電腦工作室
Website: http://olc.tw
****************************************************
應用擴展 工具箱


回覆: 解决Router带prefix时,formHelper Create的问题
Just popping in
註冊日期:
2008/12/19 9:24
文章: 9
plugin当然也可以了,但相同功能的代码,几乎要复制一遍,而且万一以后,修改也不方便^_^

發表日期:2008/12/30 13:29
_________________
CAKEPHP教程:http://www.71151461.cn
應用擴展 工具箱







[進階搜尋]