Your SlideShare is downloading. ×
0
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
極める routes.php
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

極める routes.php

23,766

Published on

CakePHP勉強会#4@Tokyoでの発表資料です。

CakePHP勉強会#4@Tokyoでの発表資料です。

Published in: Technology
0 Comments
24 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
23,766
On Slideshare
0
From Embeds
0
Number of Embeds
7
Actions
Shares
0
Downloads
107
Comments
0
Likes
24
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. 極める routes .php by akiyan 第4 回C akeP H P 勉強会@ Tokyo at 2 0 0 9 .5 .2 2
  • 2. 自己紹介 ● 名前:akiyan / 秋田真宏 ● 所属:株式会社ヨセミテ ● ブログ:akiyan.com ● 連載:C akeP H P で高速W ebアプリ開発 (g ihyo.jp)
  • 3. 今回の発表のゴール ● URLを自由に作れるようになります。 ● ビューでリンクを作るときに、 $html->url('/users/detail/' . $user['User']['id']) みたく、URLを自前で作っているところを全部 直したくなります。 ● Paginationで自由にパラメータを引き継げるよ うになります。 ● routes.phpをいじるのが怖くなくなります。
  • 4. 目次 みなさまに質問 ● routes.phpとは ● 基本の書式 ● 応用の書式 ● 逆ルーティング! ● Paginatorにパラメータをつける(今日の目玉) ● よくあるトラブル
  • 5. みなさまに質問 routes.phpを知っている人? routes.phpを書き換えたことがある人? rewriteを使わずに、routes.phpだけで大抵のURL を作れる自信がある人?
  • 6. routes.phpとは 1 / 2 ● ルーティング。URLからコントローラやアク ションを特定する処理や設定のこと。 ● 例:普通なら /users/view/akiyan でアクセスす るところを /member/akiyan でもアクセスでき るようにする、など。
  • 7. routes.phpとは 2 / 2 ● 設定は app/config/routes.phpに書く。 ● 設定は上から順に検索され、最初にマッチした 設定が適用される。 ● URL中にパラメータが点在するような複雑な URL (例:/users/akiyan/blog/category/git/ ) も作れる。
  • 8. 基本の書式 静的割りあて :action paramsルーティング wildcard
  • 9. 基本の書式 [ 静的割り当て ] ● 単純にURLを置換したい。 ● Router::connect('/memberlist/', array( 'controller' => 'users', 'action' => 'index', ); ● /users/index/ が /memberlist/ でアクセスできる ようになる。
  • 10. 基本の書式 [ :action ] ● アクション名はURLから受け取りたい。 ● '/members/:action/', array( 'controller' => 'users', ) ● /users/withdraw/ が /members/withdraw/ でも アクセスできるようになる。
  • 11. 基本の書式 [ paramsルーティング ] ● URL中にパラメータを自由な場所に書きたい。 ● '/member/:user_id/:action/', array( 'controller' => 'users', ); ● /user/akiyan/active/ でアクセス ● UsersController::active() が呼ばれる ● $this->params['user_id']; で akiyan を参照でき る。
  • 12. ここでハマりポイント ● '/member/:user_id/', array( 'controller' => 'users', 'action' => 'postview', ); って書いて、 /user/akiyan/28 でアクセスできない! ● 原因:”28”があるせいでURLルールに完全にマッチせ ず、ルーティングされなくなった(普通に解釈されて しまった)。
  • 13. 基本の書式 [ wildcard ] ● アクション関数にパラメータを渡したい。 ● '/member/:user_id/post/*', array( 'controller' => 'users', 'action' => 'postview', ); ● /member/akiyan/post/28 ● Controller::postview($post_id) ● ($post_id, $sub_id = null) など、パラメータの 数も可変でいける。
  • 14. 応用の書式 パラメータ制約 静的パラメータを渡す
  • 15. 応用の書式 1/2 [ パラメータ制約 ] ● /posts/28 を /posts/view/28 にマッピングしたい ● ただし、28の部分は数字のときだけにしたい。 ● Router::connect('/posts/:id/', array( 'controller' => 'posts', 'action' => 'view', ), array( 'id' => '[0-9]+', )); ● Router::connect()への第三匹数が登場。 ● 正規表現で全体にマッチすることが条件(制 約)となる。
  • 16. 応用の書式 2/2 [ 静的パラメータ ] ● URLから静的に、コントローラにパラメータを 渡したい。 ● '/users/', array( 'controller' => 'users', 'action' => 'index', 'status' => 'active', ); ● $this->params['status'] に 'active' が入る ● 何がうれしいの?
  • 17. 静的パラメータで嬉しいこと ● 静的パラメータは、paramsルーティングのデフォルト 値としても使える。 ● '/memberlist/:status/', array( 'controller' => 'users', 'action' => 'index', 'status' => 'active', ); ● /meberlist/ だと 'active' になる。 ● /memberlist/withdraw/ だと 'withdraw' で上書きされ る。 ● ゆえに、issetしなくていい!!
  • 18. 逆ルーティング! 逆ルーティングとは 逆ルーティングが使える箇所 逆ルーティングの基本 逆ルーティングの動作例
  • 19. 逆ルーティングとは ● ルーティングは URL からコントローラーやアクショ ンを特定すること。 ● 逆ルーティングは、コントローラー(名)やアクション (名)から、URLを特定(作成)すること。ルーティングの 逆。
  • 20. 逆ルーティングが使える箇所 ● HtmlHelper::link(), url() ● PaginatorHelper::numbers(), next(), prev(), etc... ● Controller::redirect(); ● AjaxHelper …etc.. ● URLを渡す/URLが内部で作られるメソッドは おそらく全て。
  • 21. 逆ルーティングの基本 ● routes.phpに書いたルーティングの設定が、そ のまま逆ルーティングの設定になります。 ● 完全マッチが基本です。ルーティングと同じ。
  • 22. 逆ルーティングの動作例 1 ● Router::connect('/userlist/', array( 'controller' => 'users', 'action' => 'index', ); ● $html->url(array( 'controller' => 'users', 'action' => 'index', )); ● /userlist
  • 23. 逆ルーティングの動作例 2 ● $html->url(array( 'controller' => 'users', 'action' => 'index', '?' => array('keyword' => 'fuga'), '#' => 'results', )); ● /userlist?keyword=fuga#results
  • 24. キー名に ? て! キー名に # て! (マニュアル記載なし)
  • 25. Paginatorにパラメータをつける ポイント paramsルーティング QUERY_STRING
  • 26. Paginatorにパラメータをつけるポイント コントローラーでPaginationをセットアップする ときの、 $this->paginate => array('Model' => array( 'options' => … )); がポイントです! (マニュアル未記載、日本語情報未確認)
  • 27. パラメータ例 1 [ paramsルーティング ] ● '/memberlist/:status/', array(...); ● $this->paginate = array('Model' => array( 'options' => array( 'status' => 'active', ), ); ● $patinator->next(); ● /memberlist/active/page:2
  • 28. パラメータ例 2 [ QUERY_STRING ] ● '/memberlist/', array(...) ● $this->paginate = array('Model' => array( 'options' => array( '?' => array('keyword' => 'fuga'), '#' => 'results', ), ); ● /memberlist/page:2?keyword=fuga#results
  • 29. 注意点 ● paginateするコントローラー名とアクション名 が、実行中のものと異なる場合はoptionsの中で 指定が必要です。 'options' => array( 'controller' => 'users', 'action' => 'index', … ), ● そんなケースは稀ですけどね。
  • 30. これでもうPaginatorは怖くない!
  • 31. よくあるroutes.phpのトラブル例
  • 32. ルーティングをいろいろ書いていた らいつのまにかマッチしなくなった ● 主な原因 ● 他のルーティングに先にマッチしている。 ● 解決策(いずれか、または組み合わせで) ● *で書くのをやめて、paramsルーティングで設定 する。 ● パラメータ制約を加える。 ● 設定の順序を変える。
  • 33. トラブル実例 ● '/member/*', array( 'controller' => 'users', 'action' => 'index') '/member/:id/', array( 'controller' => 'users', 'action' => 'view') ● /member/28 でアクセスするとどうも上のルー ルが適用されているっぽい。 ● /member/* に先にマッチしてしまっている。 ● /member/:id/ を先にしつつ、制約で 'id' => '[0- 9]+' を加える。(制約を加えないと今度は:idに 食われる)
  • 34. routes.phpデバッグのTIPS ● pr($this->params) が便利です。 ● デバッグ目的でなくても一度見ておくと CakePHPの構造が垣間見えて面白いです。
  • 35. ご清聴ありがとうございました

×