Kohana中的路由3.3.1

时间:2013-09-10 12:38:35

标签: php url-routing kohana

我最近开始使用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后面输入/的东西,它应该重定向到定义的控制器和动作。但它似乎没有用。当我在默认URI后面输入ANYTHING时,我收到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。

所以它还没有正常工作我猜

1 个答案:

答案 0 :(得分:3)

由于/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删除它,因为一个catchall默认路由是一个坏习惯。路线应该是具体的。我建议删除它。

如果您认为拥有一条捕获路线是捕获所有404请求的好方法,请让Custom Error Pages tutorial证明您错了。