0

在这里,我试图路由页面而不在 URL 中显示其操作,

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

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

它工作正常....

但我需要将idandname设为可选并尝试了这个:

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

根据 http://book.cakephp.org/view/542/Defining-Routes

但是,当我尝试使用此 URLhttp://localhost/brands/1时,它会搜索操作 1,但http://localhost/brands/1/xyz工作正常。

我的路由配置有错误吗???

4

2 回答 2

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,}')
);

(最后是 /brands 的路线)

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

然后检查控制器中的 $this->params['id'] 和 $this->params['name'] 。如果需要,重定向到正确的 url(如果页面相同,并且您总是希望在 url 中包含名称,这对 SEO 有好处)。

于 2010-07-17T12:43:39.620 回答
1

指定第二条路线,省略可选参数。

于 2010-07-17T13:14:34.103 回答