CakePHP路由-[home]/slug作为URL
我正在努力掌握蛋糕的路线,但我没有找到解决我的特殊问题的方法 我想将www.example.com/slug映射到www.example.com/victions/view/slug,其中slug是特定场馆记录的URL友好名称 然后我还要将www.example.com/slug/events映射到www.example.com/events/index/vention:slugCakePHP路由-[home]/slug作为URL,cakephp,routing,cakephp-1.3,Cakephp,Routing,Cakephp 1.3,我正在努力掌握蛋糕的路线,但我没有找到解决我的特殊问题的方法 我想将www.example.com/slug映射到www.example.com/victions/view/slug,其中slug是特定场馆记录的URL友好名称 然后我还要将www.example.com/slug/events映射到www.example.com/events/index/vention:slug 在阅读了关于路由的CakePHP文档几遍之后,我一点也不聪明。我知道我将如何为每个场馆创建这些路线,但我不确定如何让
在阅读了关于路由的CakePHP文档几遍之后,我一点也不聪明。我知道我将如何为每个场馆创建这些路线,但我不确定如何让Cake动态生成路线。首先,您没有将www.example.com/slug连接到www.example.com/vinces/view/slug,而是将
/slug
连接到控制器操作。像这样:
Router::connect('/:slug',
array('controller' => 'venues', 'action' => 'view'),
array('pass' => array('slug'));
要生成适当的链接,您可以反向执行相同的操作:
$this->Html->link('Foo',
array('controller' => 'venues', 'action' => 'view', 'slug' => 'bar'))
这将导致链接/bar
路由
/:slug
URL的问题在于它是一个包罗万象的路由。在此之前,您需要仔细定义可能要使用的所有其他路由。您需要仔细地将某些内容映射到域名后的第一个路径。这意味着您将破坏controller/action/param/param范式。您可以这样做,但这可能意味着您需要在路由文件中定义站点的每个url,而不是使用Cake的路由魔术
另一种方法可能是对场馆使用/v/和对活动使用/e/以保持url简短,但将url分解为正常模式
如果你仍然想做你在这里要求的事情,你可以做如下的事情。它将slug限制为字母、数字、破折号和下划线
Router::connect(
'/:slug',
array(
'controller' => 'venues',
'action' => 'view'
),
array(
'slug' => '[a-zA-Z0-9_-]+'
)
);
Router::connect(
'/:slug/:events',
array(
'controller' => 'events',
'action' => 'index'
),
array(
'slug' => '[a-zA-Z0-9_-]+'
)
);
在您的控制器中,您将通过以下方式访问slug(以第一条路径为例)
这个人现在需要一个@Dunham吗?为什么?正如你所说,它现在正在捕获所有路由。谢谢你的评论-我没有完全理解路由中的传递参数。我看到了与某物联系的困难。我最初的想法是以某种方式询问数据库是否/无论什么是slug,如果不是,则让cake执行其默认操作/场地/子弹!
function view(){
if(isset($this->params['slug'])){
//Do something with your code here.
}
}