私はKohanaをインストールして実行しようとしています。私はCakePHPを少し使いましたが、一般的なフレームワークとそれには非常に新しいです。Kohana:要求されたURLが見つかりませんでした
はとにかく...私はこれを持っている私のブートストラップファイルに:
// GET PARAMS -- This basically splits domain.com/kohana/controller/action/param1/etc
// into: controller | action | param1 | etc
$requestURI = explode('/', $_SERVER['REQUEST_URI']);
$scriptName = explode('/',$_SERVER['SCRIPT_NAME']);
for($i= 0;$i < sizeof($scriptName);$i++){
if ($requestURI[$i] == $scriptName[$i]){
unset($requestURI[$i]);
}
}
$param = array_values($requestURI);
$controller = @ $param[0];
$action = @ $param[1];
$param1 = @ $param[2];
$param2 = @ $param[3];
$param3 = @ $param[4];
$param4 = @ $param[5];
$param5 = @ $param[6];
$param6 = @ $param[7];
今、私は私のデータベースに接続し、基本的には最初のパラメータ別名$のparamかどうかを確認したい[0]別名の$コントローラが同じです私のページの "categories"(私のcategories_pagesテーブルに対応しています)に移動します。それがカテゴリであれば、デフォルトの "categories"コントローラを使用したいと思います。コントローラーは$ param [0]になります。つまり、私がdomain.com/kohana/moviesまたはdomain.com/kohana/gamesに行くとカテゴリコントローラが表示されます。domain.com/kohana/usersにはユーザコントローラが表示されます。
$db = Database::instance();
$getiscategory = DB::select('*')->from('categories_pages')->where('directory', '=', $controller)->execute();
$is_category = $getiscategory->count();
if($is_category){
$controller = "categories";
}
$controller = (empty($controller)) ? 'index' : $controller;
$action = (empty($action)) ? 'index' : $action;
上記の作業を達成したいもの。私が$ is_categoryをエコーすると、カテゴリの一致があったときに値1が返され、$ controllerをエコーした場合、「カテゴリ」がコントローラに設定されていることがわかります。
は、ここで私はそれがルーティングだ場所がわからないんだけど、残念ながら...
Route::set(
'custom',
'(<controller>(/<action>(/<param1>)(/<param2>(/<param3>(/<param4>(/<param5>(/<param6>)))))))'
)->defaults(array(
'controller' => $controller,
'action' => $action,
'param1' => $param1,
'param2' => $param2,
'param3' => $param3,
'param4' => $param4,
'param5' => $param5,
'param6' => $param6,
));
実際のルーティング方法のために私のコードです。私が言及したように、$ controllerは以前は正しいカテゴリとして返されましたが、エラーメッセージ "HTTP_Exception_404 [404]:リクエストされたURL $ param [0](ムービーやゲームなど)がこのサーバー上に見つかりませんでした。
「カテゴリ」コントローラクラスを使用したいので、カテゴリに一致するコントローラクラスが$ param [0]にないことに注意してください。私がdomain.com/kohana/categoriesに行くとうまくいきます。
誰もが知っているか回避策を知っていますか?
加算#1
私は、カテゴリコントローラが呼び出されると、正しいアクションが呼ばれていても、まだ表示する「ショー」のコントローラを必要としていることを考え出しました。私は非常に基本的な情報(テンプレート、コンテンツ、等)とショーコントローラを追加し、それが正しく示した。指定されたコントローラを表示させるためのルーティングクラスの回避策はありますか?私が言ったように、私はそれに行くコントローラを教えて、それを認めますが、実際にはそれに行くことはありません。
これは申し訳ありませんが、ブートストラップのコードは完全に無効であると思います。フレームワークを使用する理由は、このようなことをする必要はありません。あなたのアクションでは '$ this-> request-> param()'ですべてのルートセグメント(またはパラメータ)を得ることができます。 http://kohanaframework.org/3。2/guide/kohana/routing#request-parameters あなたの実際のルーティングに関する問題は、ドキュメントとLethargyの答えをもっと読んでください。あなたのURIに ''を含まないルートを指定し、 'defaults()'にデフォルトコントローラを設定することができます。 –