1

我最近开始使用 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。

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

4

1 回答 1

3

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

如果您只有这两条路线,按此顺序,/index.php/street/derp应该与路线“test1”相匹配。

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

默认路由更多的是示例。这是关于 Kohana 的问题跟踪器的讨论,将其删除,因为包罗万象的默认路由是一种不好的做法。路线应该是具体的。我建议删除它。

如果您认为拥有一个包罗万象的路由是捕获所有 404 请求的好方法,请让自定义错误页面教程证明您错了。

于 2013-09-10T17:50:58.000 回答