Curl 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]+')

我是cakePHP新手,我希望在我的应用程序中重写我的URL

对于我的一些控制器,我希望导航为

`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)); 
问题

  • 规则是否仅适用于上述控制器和操作,即产品和视图

  • 为什么我的url(悬停)显示为
    controller/action/slug:slug\u name
    而不是
    controller/action/slug\u name

  • 在同一个控制器中,我希望使用不同的url重写,例如
    action/id/slug\u name
    或我发送的
    /action
    或我只使用slug
    action/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友好也更好