2010-07-17 133 views
0

在这里,我想对路由页面没有显示出其在URL操作,CakePHP的路由帮助

例如:网址为http://localhost/brands/1/xyz

Router::connect(
    '/brands/:id/:name', 
    array(
     'controller' => 'brands', 
     'action' => 'index', 
     'id' => '[0-9]{1,}', 
     'name' => '[a-z]{1,}' 
    ) 
); 

它工作得很好....

但我需要使idname为可选项,并尝试过这样做:

Router::connect(
    '/brands/:id/:name', 
    array(
     'controller' => 'brands', 
     'action' => 'index', 
     'id' => '[0-9]{1,}', 
     'name' => '[a-z]{1,}' 
    ) 
); 

according to http://book.cakephp.org/view/542/Defining-Routes

但是,当我尝试这个网址http://localhost/brands/1它搜索操作1,但http://localhost/brands/1/xyz工作正常。

我的路由配置中是否有任何错误?

+0

通常,到目前为止,具有足够声誉的人会偶然发现您的问题并修正格式。无论如何,我建议您使用提供的功能编辑问题并设置代码格式,以使您的帖子更清晰。 (选择代码的部分,然后按下带有1和0的图标,或者按键盘上的CTRL + K。) – 2010-07-17 11:51:57

+0

是同一品牌的ID和名称?我的意思是,这个名字是用来打印一个友好的品牌名称?在这种情况下,当你输入url localhost/brands/1(在这种情况下建议多一点代码..) – Oscar 2010-07-17 12:32:48

回答

2

如果你只是希望能够访问http://localhost/brands/1,你需要添加这条路线:

Router::connect('/brands/:id', 
    array('controller' => 'brands','action' => 'index','id' => '[0-9]{1,}') 
); 

(也保持原来的路线)

Router::connect('/brands/:id/:name', 
    array('controller' => 'brands','action' => 'index','id' => '[0-9]{1,}','name' => '[a-z]{1,}') 
); 

(最后一个路径对于/品牌)

Router::connect('/brands', 
    array('controller' => 'brands','action' => 'index') 
); 

然后检查$ this-> params ['id']和$ this-> params ['name'] in控制器。如果需要,重定向到正确的网址(如果网页是相同的,你总是希望在网址中有这个名字,这对SEO很有用)。

+0

但是应该是可选的...如果我像这样路由,那么名称需要添加到URL当我尝试访问/品牌/将抛出错误........ – RSK 2010-07-19 04:26:02

+0

更新了答案。您需要一条额外的路线进入/品牌。 – Oscar 2010-07-22 08:08:53

1

指定第二个路由,省略可选参数。