【问题标题】:Routing in Kohana 3.3.1Kohana 3.3.1 中的路由
【发布时间】:2013-09-10 12:38:35
【问题描述】:

我最近开始使用 kohana 3.3.1 框架并遇到了一些问题。

我想为不同的入口点创建不同的路线。现在,这是默认路线,似乎可以正常工作(我认为):

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));

当我访问该网站时,它会显示“你好,世界!”。

我有一个名为 Street 的控制器,位于 application/classes/Controller/Street.php 中。

这个控制器的代码是:

<?php defined('SYSPATH') or die('No direct script access.');

class Controller_Street extends Controller {

    public function action_index()
    {
        $this->response->body('hello, street!');
    }

问题是,我想在 URI 后面输入 /something,它应该重定向到定义的控制器和操作。但这似乎不起作用。当我在默认 URI 后面输入任何内容时,我得到 404 错误。

路线,我用这个

/**
 * Set the routes. Each route must have a minimum of a name, a URI and a set of
 * defaults for the URI.
 */


Route::set('test1', 'street/<id>')
    ->defaults(array(
        'controller' => 'street',
        'action'     => 'index',
    ));

Route::set('default', '(<controller>(/<action>(/<id>)))')
    ->defaults(array(
        'controller' => 'welcome',
        'action'     => 'index',
    ));

任何帮助将不胜感激。

编辑

我刚刚尝试了 @Darsstar 的指令去 /index.php/street,它成功了! 但是现在,当我尝试转到 /index.php/street/derp 时,我收到一条错误消息

在此服务器上找不到请求的 URL derp。

所以我猜它还不能正常工作

【问题讨论】:

  • 您的控制器是否正确(检查名称是否区分大小写、文件夹是否正确、方法是否正确)?
  • 感谢您的回复@kingkero。 codeRoute::set('test1', 'test/') ->defaults(array( 'controller' => 'test', 'action' => 'index', ));/code如果我在地图控制器中有一个测试控制器(就像welcome)和action_index(就像在welcome控制器中一样)它应该可以正常工作吗?但是当我浏览到 ../test 时,它告诉我找不到请求的资源!
  • 不客气,但它解决了问题吗?如果没有,请提供更多代码(如您要访问的控制器)
  • 我更新了我的第一篇文章,提供了更多细节
  • 如果你去index.php/test 可以吗?因为那很可能与您的.htaccess 有关。哦,'test/' 与 URI 'test' 不匹配,因为 id 参数不在括号之间,因此是必需的。但是,默认路由会匹配它,并且应该将您调度到 Controller_Test::action_index()。

标签: php url-routing kohana


【解决方案1】:

由于/index.php/street 版本有效,如果您还没有阅读Clean URLs tutorial,请阅读。如果有,请仔细检查所有内容!

如果您只有这两个路由,那么按照这个顺序,/index.php/street/derp 应该匹配路由“test1”。

错误消息“在此服务器上未找到请求的 URL derp。”说你去了/index.php/derp,而不是index.php/street/derp。这将匹配默认路由并被分派到 Controller_Derp::action_index(),但它不存在,因此 Request_Internal::execute() 会抛出 HTTP_Exception_404。

默认路由更多的是示例。这是一个 discussion on Kohana's issue tracker 来删除它,因为包罗万象的默认路由是一种不好的做法。路线应该是具体的。我建议删除它。

如果您认为拥有一个包罗万象的路由是捕获所有 404 请求的好方法,请让 Custom Error Pages tutorial 证明您错了。

【讨论】:

  • 非常感谢您提供的信息!我将开始阅读这些信息。我不想只有两条路线,但是当我输入一个不存在的 url 时,它应该将请求重定向到我选择的东西,例如一些无效的页面或其他东西。
  • 还没有,还没来得及尝试。但是感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多