Symfoware

Symfowareについての考察blog

CodeIgniter 3 URIによるコントローラ呼び出しの分岐(General Topics - URI Routing)

CodeIgniter User Guide

General TopicsのURI Routingについて調べてみます。
URI Routing



URI Routing



特に何も設定していない場合、URIで指定されたコントローラーとコントローラークラスにある
メソッドが自動的に呼び出されます。

例えば、


example.com/class/function/id/



この場合、classという名前のコントローラーのfunctionという名前のメソッドが
idという引数を伴い呼び出されます。

しかし、メソッド名を省略し


example.com/product/1/
example.com/product/2/
example.com/product/3/
example.com/product/4/



こういったURIで処理したいときは、URIマッピングを再設定する必要があります。




Setting your own routing rules



独自のルーティング(URI制御)を行いたい場合、「application/config/routes.php 」ファイルを編集し、
アクセス許可の設定を行います。
ルートの指定は、ワイルドカートによる指定や正規表現による指定が行えます。



Wildcards



ワイルドカードによるルーティングの指定例です。


  1. $route['product/:num'] = 'catalog/product_lookup';




コントローラークラスを適当に作成しておきます。


  1. <?php
  2. class Catalog extends CI_Controller {
  3.     public function product_lookup() {
  4.         echo 'Catalog::product_lookup';
  5.     }
  6. }




「example.com/product/1/」でアクセスすると、Catalogクラスのメソッドが
呼び出されたことがわかります。

536_01.png


引数なしや、数値以外の引数を指定すると404エラーです。

536_02.png



  1. $route['product/:any'] = 'catalog/product_lookup';



このように指定すれば、何が引数で指定されてもページが表示されます。





Examples



設定例です。


  1. $route['journals'] = 'blogs';




これで、journalsクラスの代わりにblogsクラスのメソッドが呼び出されます。




  1. $route['blog/joe'] = 'blogs/users/34';



blog/joeでアクセスされたら、blogsコントローラーのusersメソッドを
引数34で呼び出します。




  1. $route['product/(:any)'] = 'catalog/product_lookup';



/productが指定されたら、続く引数が何であっても
catalogクラスのproduct_lookupメソッドが呼び出されます。

536_03.png





  1. $route['product/(:num)'] = 'catalog/product_lookup_by_id/$1';



/product/(数値)の呼び出しの場合、catalogクラスのproduct_lookup_by_idメソッドを
引数付きで呼び出します。

サンプルは以下のとおり。



  1. <?php
  2. class Catalog extends CI_Controller {
  3.     public function product_lookup($any) {
  4.         echo 'Catalog::product_lookup, ' . $any;
  5.     }
  6. }



536_04.png





Regular Expressions



正規表現による指定の例です。


  1. $route['products/([a-z]+)/(\d+)'] = '$1/id_$2';



これで「products/shirts/123」という呼び出しの場合、
shirtsコントローラーのid_123メソッドが呼び出されます。


  1. <?php
  2. class Shirts extends CI_Controller {
  3.     public function id_123() {
  4.         echo 'id_123';
  5.     }
  6. }



536_05.png



ログイン認証が必要な領域にユーザーがアクセスした時、ログイン後
元のページにリダイレクトさせたいときはこんな指定が便利です。


  1. $route['login/(.+)'] = 'auth/login/$1';



※正直、どう便利なのか理解できてないです。




Callbacks



PHP5.3以上であれば、ルーティングルールに関数を指定することができます。


  1. $route['products/([a-zA-Z]+)/edit/(\d+)'] = function ($product_type, $id)
  2. {
  3.         return 'catalog/product_edit/' . strtolower($product_type) . '/' . $id;
  4. };







Using HTTP verbs in routes



httpリクエストのメソッド(GET,PUT,POST,DELETEなど)によりルートを指定することができます。


  1. $route['products']['put'] = 'product/insert';




この指定で、/productsにputリクエストが来ればproductsクラスのinsertメソッドが呼び出されます。




  1. $route['products/(:num)']['DELETE'] = 'product/delete/$1';




この指定では、products/(数値)にdeleteリクエストが来れば、
productsクラスのdeleteメソッドが引数付きで呼び出されます。





Reserved Routes



予約済みのルーティングルール名があります。
まず、何も指定がないばあいに呼び出されるデフォルトコントローラーの指定。


  1. $route['default_controller'] = 'welcome';





404エラーが発生した時に呼び出されるページの指定。


  1. $route['404_override'] = '';




デフォルトで、「application/views/errors/html/error_404.php」が
呼び出されます。



URIに「-」(ダッシュ)が含まれている場合、自動的に「_」(アンダースコア)に
変換するかどうかの指定です。


  1. $route['translate_uri_dashes'] = FALSE;




TRUEにすると、自動的に変換が行われます。




CodeIgniter 3のユーザーガイド(User Guide)まとめ

関連記事

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2015/01/28(水) 21:59:24|
  2. PHP
  3. | トラックバック:0
  4. | コメント:0
  5. | 編集
<<CodeIgniter 3 エラー処理について(General Topics - Error Handling) | ホーム | CodeIgniter 3 互換性維持のための関数について(General Topics - Compatibility Functions)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://symfoware.blog68.fc2.com/tb.php/1611-9efc9a52
この記事にトラックバックする(FC2ブログユーザー)