0

コハナ3.2で次のようなURIに一致するルートを作成しようとしています

api/article/get.json

api/article/get/123.xml

api/blogpost/post.json

api/user/get/username.json

つまり、APIというサブディレクトリがあり、すべてのAPIコントローラーがあり、ルートはコントローラー、メソッド、形式、またはIDと一致します。

私は私の中に次のルートを設定しましたapplication/bootstrap.php

Route::set('api', 'api/<controller>(/<action>(/<id>).<format>)',
  array(
    'format' => '(xhtml|xml|json|rss|html|php|serialize)',
  ))
  ->defaults(array(
    'directory' => 'api',
    'controller' => 'blogposts',
    'action' => 'get',
    'format' => 'json',
  ));

このルートの複数の組み合わせで遊んだことがありますが、次のようなURLに対して次のエラーメッセージが表示されるたびに発生します。localhost/api/blogposts/post.json

HTTP_Exception_404 [ 404 ]: The requested URL api/blogposts/post.php was not found on this server.

これは問題ないように思えますが、私は何か間違ったことをしているに違いありません。

ヘルプをいただければ幸いです。

オネマ

編集

私のデフォルトのコントローラーは最後に設定されていますが、 SOKohana3ルートでこの投稿が一致していないことがわかったので言及しようと思いました

4

1 に答える 1

0

これはおそらく初心者の間違いですが、問題はルートではなく、ここでのクラス名が理由です。

コントローラーを

application/classes/controller/api/bloposts.php

そしてクラスの名前は

class Controller_Blogposts extends Controller {
  ...
}

アプリケーションのデバッグに時間を費やした後、問題はルートではなく、本来あるべきクラスの名前ではないことがわかりました。

class Controller_Api_Blogposts extends Controller {
  ...
}

オートローダーがルートapi/blogposts.jsonをクラス「Controller_Api_Blogposts」にマップするため。

Kohana 3.2の規則とコーディングスタイルでは、クラス名とファイルパスを示す優れた表があります。

Kohana3.2のクラス名と対応するファイルパス

ディレクトリを使用したルートマッピングの背後にある技術が100%わからないのですが、ルートが<directory>(この場合はapi )にマップされている場合、 apiは「application / classes/controller」ディレクトリにあると見なすのが安全です。

于 2012-06-13T18:17:13.087 に答える