【问题标题】:Can I do this with one route definition in Kohana 3?我可以在 Kohana 3 中使用一个路由定义来做到这一点吗?
【发布时间】:2010-12-13 05:00:00
【问题描述】:

这是我的一条路线...

Route::set('products', 'our-products(/<product>)')
->defaults(array(
    'controller' => 'products',
    'action'     => FALSE
)); 

通过访问/our-products,您可以访问产品索引(将调用Controller_Products::action_index())。

我希望路由如下工作:添加可选产品时,它应该调用不同的方法,即如果请求/our-products/product-a,而不是调用Controller_Products::action_index(),它会调用类似Controller_Products::action_get('product-a')的方法。

我意识到我可以通过两条路线轻松做到这一点,但我更愿意使用一条路线。

我也想过检查action_index() 中的参数,并调用另一个方法,但这听起来很难看。

我也试过__call(),但得到了这个非常不寻常的错误......

致命错误:类声明可能未嵌套在第 3 行的 /home/user/public_html/~new/system/classes/date.php 中

有可能做我想做的事吗?最好的方法是什么?

谢谢

【问题讨论】:

  • 你为什么要在一条路线上这样做?路由的发明是为了将不同的请求分离到不同的操作。
  • @zerkms 他们似乎足够相关,可以进入一条路线。
  • @alex:不同意。如果您有不同的 defaults 取决于 url 值 - 它们似乎与一个无关(这是我个人的观点)。
  • @zerkms &lt;controller&gt;/&lt;action&gt; 怎么样? :P
  • @zerkms 这是处理许多动作和控制器的通用路由。我希望我可以建立一个这样的通用路线(但不诉诸our-products/get/product-a)。

标签: php routing kohana


【解决方案1】:
  1. 检查action_get() 方法中的product 参数,如果为空,则调用action_index()(或其他)。
  2. 阅读this topic 了解您的异常错误。

【讨论】:

    【解决方案2】:

    重载Controller::before()方法中的动作,像这样:

    if ($this->request->param('product'))
    {
        $this->request->action = 'get';
    }
    

    【讨论】:

      猜你喜欢
      • 2023-03-20
      • 1970-01-01
      • 2011-09-15
      • 1970-01-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 2013-01-01
      • 2020-06-07
      相关资源
      最近更新 更多