Submit Search
Upload
極める routes.php
•
27 likes
•
14,727 views
Masahiro Akita
Follow
CakePHP勉強会#4@Tokyoでの発表資料です。
Read less
Read more
Technology
Report
Share
Report
Share
1 of 35
Download now
Download to read offline
Recommended
RESTfulとは
RESTfulとは
星影 月夜
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Shohei Okada
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
CONNECT FOUNDATION
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
Composer 從入門到實戰
Composer 從入門到實戰
Shengyou Fan
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
onozaty
Recommended
RESTfulとは
RESTfulとは
星影 月夜
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
OPcacheの新機能ファイルベースキャッシュの内部実装を読んでみた
Yoshio Hanawa
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Laravel でやってみるクリーンアーキテクチャ #phpconfuk
Shohei Okada
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
[부스트캠프 Tech Talk] 진명훈_datasets로 협업하기
CONNECT FOUNDATION
Laravelでfacadeを使わない開発
Laravelでfacadeを使わない開発
Kenjiro Kubota
Composer 從入門到實戰
Composer 從入門到實戰
Shengyou Fan
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
MySQL・PostgreSQLだけで作る高速あいまい全文検索システム
Kouhei Sutou
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
Redmineの画面をあなた好みにカスタマイズ - View customize pluginの紹介 - Redmine Japan 2020
onozaty
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Masahito Zembutsu
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
Google Cloud Platform - Japan
はじめてのCouch db
はじめてのCouch db
Eiji Kuroda
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
php-src の歩き方
php-src の歩き方
do_aki
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
Kouhei Sutou
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
Shengyou Fan
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
Insight Technology, Inc.
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Masashi Shibata
ユーザ要望に応えるView customize活用事例
ユーザ要望に応えるView customize活用事例
Hidehisa Matsutani
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
경원 이
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
Control Structures In Php 2
Control Structures In Php 2
Digital Insights - Digital Marketing Agency
Obsidian Talk JP - Template & Daily notes - 2021-09-04
Obsidian Talk JP - Template & Daily notes - 2021-09-04
博文 斉藤
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
Jun Terashita
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
Noriyoshi Shinoda
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
Masahiro Akita
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
kenjis
More Related Content
What's hot
PHP AST 徹底解説
PHP AST 徹底解説
do_aki
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
Masahito Zembutsu
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
Google Cloud Platform - Japan
はじめてのCouch db
はじめてのCouch db
Eiji Kuroda
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
do_aki
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
Masatoshi Tada
php-src の歩き方
php-src の歩き方
do_aki
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
Kouhei Sutou
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
kikairoya
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
shinjiigarashi
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
Shengyou Fan
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
Insight Technology, Inc.
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Masashi Shibata
ユーザ要望に応えるView customize活用事例
ユーザ要望に応えるView customize活用事例
Hidehisa Matsutani
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
경원 이
SpringBootTest入門
SpringBootTest入門
Yahoo!デベロッパーネットワーク
Control Structures In Php 2
Control Structures In Php 2
Digital Insights - Digital Marketing Agency
Obsidian Talk JP - Template & Daily notes - 2021-09-04
Obsidian Talk JP - Template & Daily notes - 2021-09-04
博文 斉藤
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
Jun Terashita
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
Noriyoshi Shinoda
What's hot
(20)
PHP AST 徹底解説
PHP AST 徹底解説
分散環境におけるDocker とオーケストレーション
分散環境におけるDocker とオーケストレーション
What’s new in cloud run 2021 後期
What’s new in cloud run 2021 後期
はじめてのCouch db
はじめてのCouch db
PHP と SAPI と ZendEngine3 と
PHP と SAPI と ZendEngine3 と
Java ORマッパー選定のポイント #jsug
Java ORマッパー選定のポイント #jsug
php-src の歩き方
php-src の歩き方
PGroonga 2 - PostgreSQLでの全文検索の決定版
PGroonga 2 - PostgreSQLでの全文検索の決定版
組み込みでこそC++を使う10の理由
組み込みでこそC++を使う10の理由
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
モダン PHP テクニック 12 選 ―PsalmとPHP 8.1で今はこんなこともできる!―
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
[D31] PostgreSQLでスケールアウト構成を構築しよう by Yugo Nagata
Djangoアプリのデプロイに関するプラクティス / Deploy django application
Djangoアプリのデプロイに関するプラクティス / Deploy django application
ユーザ要望に応えるView customize活用事例
ユーザ要望に応えるView customize活用事例
Jpa 잘 (하는 척) 하기
Jpa 잘 (하는 척) 하기
SpringBootTest入門
SpringBootTest入門
Control Structures In Php 2
Control Structures In Php 2
Obsidian Talk JP - Template & Daily notes - 2021-09-04
Obsidian Talk JP - Template & Daily notes - 2021-09-04
Alfresco勉強会#28 メタデータテンプレート
Alfresco勉強会#28 メタデータテンプレート
PostgreSQL Unconference #5 ICU Collation
PostgreSQL Unconference #5 ICU Collation
Viewers also liked
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
Masahiro Akita
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
kenjis
徳丸本とAmazonと僕
徳丸本とAmazonと僕
monmon Kumagai
CakePHP3で学ぶAPIマネジメント #phpconfuk
CakePHP3で学ぶAPIマネジメント #phpconfuk
Yuta Matsumura
今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」
Soudai Sone
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
Naoto Mawatari
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
MasterCode.vn
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
Masao Maeda
Viewers also liked
(8)
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
徳丸本とAmazonと僕
徳丸本とAmazonと僕
CakePHP3で学ぶAPIマネジメント #phpconfuk
CakePHP3で学ぶAPIマネジメント #phpconfuk
今、最も勢いのあるWebフレームワーク「fuel php」
今、最も勢いのあるWebフレームワーク「fuel php」
最近、僕がハマったFuelPHPの紹介
最近、僕がハマったFuelPHPの紹介
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
Bài 1 Lập trình website theo mô hình MVC - Xây dựng ứng dụng web
フラットなPHPからフレームワークへ
フラットなPHPからフレームワークへ
極める routes.php
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.
ご清聴ありがとうございました
Download now