2011-07-08 24 views
1

最近Codeigniterを使っていましたが、コントローラ内の関数を再マップして動的なpretty URLを持つことができることを知りました。
私はちょうどコントローラで行うことができます知りたいですか?私はhttp://example.com/stackと呼ぶとstackという名前のコントローラを探し、見つからなければ固定された/再マップされたコントローラを呼び出して、それを処理することができます。
これはできますか?再マッピングCodeigniterコントローラ

答えて

1

はい、それはuri routingを使用して達成できます。

application/config/routes.phpでは、カスタムルートを再マッピングするURIに設定できます。
すでに2つが用意されていますが、デフォルトのもの(コントローラが呼び出されていない場合)と404エラールーティングがあります。

カスタムルートを追加する場合は、2つのデフォルトルートの下に追加します。表示される順序で実行されることに注意してください。

セイは、たとえば、あなただけの使用、別のコントローラに「スタック」を再マッピングしたい:

$routes['stack'] = 'othercontroller'; 

このように、あなたは「スタック」をアクセスするたびに自動的に「othercontroller」にマッピングされます、それが存在しない場合は、同じ404エラーが発生します。 .htaccessでURLからindex.phpを隠している場合は、それを$config['index_page'] = 'index.php';に挿入することを忘れないでください。

コントローラーが見つからないときに達成しようとしているのはカスタムエラーメッセージです。@ Juris Malinensが提案したように404ルートをオーバーライドし、カスタムデフォルトコントローラーを使ってその状況を処理します

$route['404_override'] = 'customcontroller'; 
+0

を、右? –

+1

@Bibhasあなたは正しいです。あなたの意志でカスタマイズされた通常のデフォルトメッセージと同じように動作します。それはかなり便利です。 –

1

あなたは/ routes.php- CodeIgniterでは、[「404_override」]

コントローラが見つからない場合

使用$ルート;-)非常に柔軟性があり、このまたは設定を行うには.htaccessを使用することができます。 config/routes.php

0

これを行うには、application/config/routes.phpファイルが適切です。 Jurisによって言及された404_overrideは、古いバージョン(私は知らない、レガシーシステムで作業しているかもしれない、または将来必要があるかもしれない)を持っている場合にのみ、CI 2.xでのみ利用可能です。

注:これを使用してコントローラを「再マップ」する以外にも、さまざまなことができます。ルートは、htaccess書き換えルールのような正規表現パターンを受け入れます。基本的には正規表現の人間が読めるエイリアスであるCIパターンもあります。あなたは完全にあなたのURLからコントローラ名を削除するためにルートを使用する方法を見て

$route["category/(:any)"] = "articles/category/$1"; 
$route["search/(:any)"] = "articles/search/$1"; 
$route["(:any)"] = "articles/article/$1'; 

:あなたはcategorysearcharticle機能を持つArticlesコントローラを持っていたと言う、あなたはのように見えたルートを持っているのでしょうか?これらのルールは、URLが特にカテゴリページまたは検索クエリであると言わない場合、そのページが記事であると仮定することに戻ります。次に、URLの記事があるかどうかを確認し、必要に応じて404を表示することができます。

3

多分これはあなたを助けることができる:私は404_overrideを使用している場合ので、customcontrollerは、コントローラが見つからないされるたびに呼び出されます

function _remap($method) 
    { 
     /// $method contains the second segment of your URI 
     switch($method)   
     { 
      case 'about-me': 
       $this->about_me(); 
       break; 

      case 'successful': 
       $this->display_successful_message(); 
       break; 

      default: 
       $this->page_not_found(); 
       break; 
     } 
    } 
関連する問題