【问题标题】:Can someone explain Kohana 3's routing system?有人能解释一下 Kohana 3 的路由系统吗?
【发布时间】:2010-01-19 02:52:10
【问题描述】:

bootstrap.php,您设置路线,我很难让它们工作。我不久前阅读了一些文档,但我似乎无法再次找到解释它们的内容。这是我的一个例子

Route::set('products', 'products/(type)', array('type' => '.+'))
    ->defaults(array(
    'controller' => 'articles',
    'action' => 'view_product',
    'page' => 'shock-absorbers',
    ));

认为这意味着像products/something 这样的请求将加载articles 控制器和action_view_product() 方法。但我无法让它工作。

谁能给我解释一下它们是如何工作的,以及所有的方法参数是什么?

【问题讨论】:

    标签: php model-view-controller routing kohana


    【解决方案1】:

    我认为这意味着一个请求 像产品/东西会加载 物品控制器,以及 action_view_product 控制器。但是我 无法让它工作。

    你把粗体部分弄错了。它实际上会加载articles控制器的action_view_product 方法

    class Controller_Articles extends Controller {
       public function action_view_product() {
           $params = $this->request->param(); 
           // if the uri is `products/something' then $params['type'] == 'something'
       }
    }
    

    编辑:

    我的天啊天啊我怎么没注意到!!!

    实际问题在于您的路线模式!它应该是products/(<type>),带有尖括号。这些会暗示 Kohana 您打算将“类型”作为参数名称,而不是文字。

    【讨论】:

    • 抱歉,打错了!我似乎仍然无法让它为我工作。
    • 是的,我有一个默认路由可以捕获所有(并且工作正常)
    • 您是否在默认路由之前声明了此自定义路由?因为路由将匹配它遇到的第一个路由,并且由于默认路由将匹配'products/something',所以它将采用该路由。
    【解决方案2】:

    括号表示可选部分(如果缺少,正则表达式将匹配)。这些可以是静态的和/或包含命名变量。尖括号表示路由中的命名变量,可通过以下方式在控制器中访问:

    $this->request->param('type');
    

    我写了官方路由指南,你可以阅读here,它应该回答你所有的问题。

    【讨论】:

      【解决方案3】:

      呃,抱歉,小于和大于的符号显示不正确

      'products/(type)' should be 'products/(<type>)'
      

      【讨论】:

      • 或者更好:'product(/&lt;type&gt;)',否则将无法匹配“产品”(不带斜线)(尽管您可能希望这样)
      【解决方案4】:

      记录在案:

      目录、控制器和操作可以从请求中作为公共属性访问,如下所示:

      // From within a controller:
      $this->request->action;
      $this->request->controller;
      $this->request->directory;
      
      // Can be used anywhere:
      Request::instance()->action;
      Request::instance()->controller;
      Request::instance()->directory;
      

      来源:http://kohanaframework.org/3.0/guide/kohana/routing#request-parameters

      【讨论】:

        猜你喜欢
        • 2012-01-11
        • 2017-11-05
        • 2019-10-24
        • 2017-12-26
        • 2023-02-10
        • 1970-01-01
        • 2018-10-02
        • 2011-11-24
        • 1970-01-01
        相关资源
        最近更新 更多