1

最近、kohana 3.3.1 フレームワークを使い始めて、いくつかの問題に遭遇しました。

エントリ ポイントごとに異なるルートを作成したいと考えています。現在、これはデフォルトのルートであり、うまく機能しているようです(私は思う):

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

Web サイトにアクセスすると、「hello, world!」と表示されます。

application/classes/Controller/Street.php に Street というコントローラーがあります。

このコントローラーのコードは次のとおりです。

<?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',
    ));

どんな助けでも喜んでいただければ幸いです。

編集

/index.php/street に移動する @Darsstar の指示を試したところ、うまくいきました! しかし、/index.php/street/derp にアクセスしようとすると、次のエラーが表示されます。

要求された URL derp がこのサーバーで見つかりませんでした。

だからまだちゃんと動いてないんだろうな

4

1 に答える 1

3

この/index.php/streetバージョンは動作するので、クリーン URL のチュートリアルをまだ読んでいない場合は読んでください。持っている場合は、すべてを再確認してください!

これら 2 つのルートがある場合、この順序で/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 に答える