Curl Cakephp Url路由
我是cakePHP新手,我希望在我的应用程序中重写我的URL 对于我的一些控制器,我希望导航为Curl Cakephp Url路由,curl,url-rewriting,cakephp-2.0,cakephp-2.1,Curl,Url Rewriting,Cakephp 2.0,Cakephp 2.1,我是cakePHP新手,我希望在我的应用程序中重写我的URL 对于我的一些控制器,我希望导航为 `controller/action/id/slug`. 为此,我将规则写为 Router::connect( '/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id'), 'id' => '[0-9]+')
`controller/action/id/slug`.
为此,我将规则写为
Router::connect(
'/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id'), 'id' => '[0-9]+')
);
我正在写链接为
echo $this->Html->link($record['Category']['name'], array('controller' => 'categories', 'action' => 'index', 'slug' => $record['Category']['slug']), array('escape' => false));
问题
controller/action/slug:slug\u name
而不是controller/action/slug\u name
action/id/slug\u name
或我发送的/action
或我只使用slugaction/slug\u name
的地方。是否只有一条规则是为所有人编写的?或者我必须为每个控制器和操作定义单独的规则 controller/action/param1:param_val1/param2:param_val2,
echo $this->Html->link('Val', array('controller' => 'categories',
'action' => 'index', 'param1' => param_val1, 'param2' => param_val2,),
array('escape' => false));
等等。但我希望有一个非常清晰、漂亮的url以及更好更快的移动。就像传递slug一样,我希望直接获取findBySlug或某种方式,使其变得更好。1)是的,当您创建路由器时::connect规则仅适用于一种情况,即适用于一个url或组os url
2) 你应该这样做
echo $this->Html->link($record['Category']['name'], array('controller' => 'categories', 'action' => 'index', $record['Category']['slug']), array('escape' => false));
3) 只有当url的结构不同时,才能为这些url创建规则
根据你的例子,规则如下
# only for action/slug_name case
Router::connect('/products/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('slug'), 'slug'=>'[a-z_]+'));
# for action/id/slug_name case
Router::connect('/products/:id/:slug', array('controller' => 'products', 'action' => 'view'), array('pass' => array('id','slug'), 'id' => '[0-9]+','slug'=>'[a-z_]+'));
4) 我建议您在编写URL时不要使用CakePHP的HTML组件。不是因为它不好,而是因为它更快更容易
而不是这样做:
controller/action/param1:param_val1/param2:param_val2,
echo $this->Html->link('Val', array('controller' => 'categories','action' => 'index', 'param1' => param_val1, 'param2' => param_val2,),array('escape' => false));
这样做更好:
controller/action/param_val1/param_val2
echo 'controller/action/'.$param_val1.DS.$param_val2;
对于搜索引擎优化和url友好也更好