3

CodeIgniter に基づいて CMS を構築しています。「ビュー」とそのデータをデータベースに保存し、必要に応じて適切なビューを収集します。ご想像のとおり、各ページに物理コントローラーと対応するビューを生成することはできません。

URL に表示されるコントローラーを使用する必要がないようにしたいので、ルートが非常に便利になると考えました。不十分な説明: URL に表示されることなく、物理的に存在するコントローラーに到達しないすべての要求をカスタム コントローラーに再割り当てする方法を探しています。もちろん、このコントローラーは 404 エラーなどを処理します。

悪い:.com/handler/actual-view/)良い: (.com/actual-view/)(actual-view controller が存在しないか、代わりに表示される)

404_overrideを指すルートを追加しましたhandler/。今、私は要求されたビューを見つける方法を探しているだけです(つまり、.com/actual-view実際のビューで探しているものです)。

私はもう試した

$route['404_override/(:any)'] = 'handler/$1';

同様に、404 オーバーライドを完全に削除します。

4

3 に答える 3

0

route.php 設定ファイルですべての有効なルートを定義する必要があり、最後の行で、

$routes["(:any)"] = "specific controller path";

例を挙げるとしたら:

$route['u/(:any)/account'] = "user_profile/account/$1";
$route['u/(:any)/settings'] = "user_profile/settings/$1";
$route['u/(:any)/messages'] = "user_profile/messages/$1";
$route['u/(:any)'] = "user_profile/index/$1";

ここに見られるように、最初の 3 つの URL をキャッチできなかった後、すべての URL をユーザー プロファイルに転用しています。

于 2012-04-16T18:47:20.663 に答える
0

ベースのルーターまたはコントローラーを拡張する方がよいでしょう。

そうすることで、アプリケーションを柔軟にしながら、CI の仕組みに準拠させることができます。

于 2012-04-16T18:12:58.153 に答える
0

私のソリューションは、CodeIgniters の素晴らしいフォーラムと StackOverflow の素敵なメンバーからのいくつかのガイダンスの後、すべての 404 エラーをカスタム コントローラーにルーティングするようになりました。そこで、それが実際の 404 (ビューまたはコントローラーなし) であることを確認します。コントローラーの後半で、データベース URI 文字列から必要な残りの情報を収集します。

//Route
$route['404_override'] = 'start/handler';

//Controller
function handler($path = false) {

   //Gather the URI from the URL-helper
   $uri_string = uri_string();

   //Ensure we only get the desired view and not its arguments
   if(stripos($uri_string, "/") !== false) {
      //Split and gather the first piece
      $pieces = explode("/", $uri_string);
      $desired_view = $pieces[0];
   } else {
      $desired_view = $uri_string;
   }

   //Check if there's any view under this alias
   if($this->site->is_custom_view($desired_view)) {

      //There is: ensure that the view has something to show
      if(!$this->site->view_has_data($desired_view)) {
         //No data to show, throw an error message
         show_custom_error('no_view_data');
      } else {
         //Found the views data: show it
      }

   } else {
      //No view to show, lets go with 404
      show_custom_404();
   }
}
于 2012-04-16T20:54:24.253 に答える