Your browser (Internet Explorer 6) is out of date. It has known security flaws and may not display all features of this and other websites. Learn how to update your browser.
X
Post

[ZF-Ex] router.iniのルーティング条件を簡略化

ver0.3.1の修正箇所。ちょっとした記述の修正です。


router.iniはディスパッチの際の
ルーティング制御を行う設定ファイルです。
このファイルの設定の記述に繰り返しが多く
冗長であった部分があったため、これを修正して簡略化しました。

修正したのは大きく分けて次の2つになります。
一つ目が編集、削除、閲覧に関わるルーティングで、
二つ目がモジュールに関するルーティングです。

一つ目については次のような形で修正を行いました。

; 管理画面のエディットルーティング
routes.admin_edit.type = "Zend_Controller_Router_Route"
routes.admin_edit.route = "admin/:controller/edit/:id/*"
routes.admin_edit.defaults.module = "admin"
routes.admin_edit.defaults.controller = "index"
routes.admin_edit.defaults.action = "edit"
routes.admin_edit.reqs.id = "\w+"

; 管理画面の削除ルーティング
routes.admin_delete.type = "Zend_Controller_Router_Route"
routes.admin_delete.route = "admin/:controller/delete/:id/*"
routes.admin_delete.defaults.module = "admin"
routes.admin_delete.defaults.controller = "index"
routes.admin_delete.defaults.action = "delete"
routes.admin_delete.reqs.id = "\w+"

; 管理画面の閲覧ルーティング
routes.admin_view.type = "Zend_Controller_Router_Route"
routes.admin_view.route = "admin/:controller/view/:id/*"
routes.admin_view.defaults.module = "admin"
routes.admin_view.defaults.controller = "index"
routes.admin_view.defaults.action = "view"
routes.admin_view.reqs.id = "\w+"

; 管理画面のid指定エディットルーティング
routes.admin_edit.type = "Zend_Controller_Router_Route"
routes.admin_edit.route = "admin/:controller/:action/:id/*"
routes.admin_edit.defaults.module = "admin"
routes.admin_edit.defaults.controller = "index"
routes.admin_edit.defaults.action = "index"
routes.admin_edit.reqs.action = "(edit|view|delete)"
routes.admin_edit.reqs.id = "\w+"

:controller/:action/:idという形で、
アクションに対して一つ対象の引数を用意する必要のあるアクションがあります。

サンプルではedit(編集)、delete(削除)、view(閲覧)なのですが、
これらのそれぞれについて個別にルーティングを設定していたため
これを1つの項目で設定するように修正しました。

routes.admin_edit.reqs.action = "(edit|view|delete)"

このようにしてアクションの条件を絞り込む事で、
特定のアクションに対して引数を一つ渡せるようになっています。
また、これに加えてさらに別のアクションに対しても
引数を一つ渡したい場合にはここに追加したいアクション名を追記する事で対応できます。


もう一つは、次のような形でモジュール別設定の修正を行いました。

; 管理画面モジュールのルーティング
routes.admin.type = "Zend_Controller_Router_Route"
routes.admin.route = "admin/:controller/:action/*"
routes.admin.defaults.module = "admin"
routes.admin.defaults.controller = "index"
routes.admin.defaults.action = "index"

; 管理画面のid指定エディットルーティング
routes.admin_edit.type = "Zend_Controller_Router_Route"
routes.admin_edit.route = "admin/:controller/:action/:id/*"
routes.admin_edit.defaults.module = "admin"
routes.admin_edit.defaults.controller = "index"
routes.admin_edit.defaults.action = "index"
routes.admin_edit.reqs.action = "(edit|view|delete)"
routes.admin_edit.reqs.id = "\w+"

; 管理画面のページング
routes.admin_page.type = "Zend_Controller_Router_Route"
routes.admin_page.route = "admin/:controller/page/:page/*"
routes.admin_page.defaults.module = "admin"
routes.admin_page.defaults.controller = "index"
routes.admin_page.defaults.action = "index"
routes.admin_page.reqs.page = "\d+"

; 管理画面のページング&ソーティング
routes.admin_page_sort.type = "Zend_Controller_Router_Route"
routes.admin_page_sort.route = "admin/:controller/page/:page/:order_sort/:order_direction/*"
routes.admin_page_sort.defaults.module = "admin"
routes.admin_page_sort.defaults.controller = "index"
routes.admin_page_sort.defaults.action = "index"
routes.admin_page_sort.reqs.page = "\d+"
routes.admin_page_sort.reqs.order_sort = "\w+"
routes.admin_page_sort.reqs.order_direction = "(asc|desc)"


; cronモジュールのルーティング
routes.cron.type = "Zend_Controller_Router_Route"
routes.cron.route = "cron/:controller/:action/*"
routes.cron.defaults.module = "cron"
routes.cron.defaults.controller = "index"
routes.cron.defaults.action = "index"


; AJAXモジュールルーティング
routes.ajax.type = "Zend_Controller_Router_Route"
routes.ajax.route = "ajax/:controller/:action/*"
routes.ajax.defaults.module = "ajax"
routes.ajax.defaults.controller = "index"
routes.ajax.defaults.action = "index"

; モジュールのルーティング
routes.module.type = "Zend_Controller_Router_Route"
routes.module.route = ":module/:controller/:action/*"
routes.module.defaults.module = "default"
routes.module.defaults.controller = "index"
routes.module.defaults.action = "index"
routes.module.reqs.module = "(admin|cron|ajax)"

; モジュールのid指定エディットルーティング
routes.module_edit.type = "Zend_Controller_Router_Route"
routes.module_edit.route = ":module/:controller/:action/:id/*"
routes.module_edit.defaults.module = "default"
routes.module_edit.defaults.controller = "index"
routes.module_edit.defaults.action = "index"
routes.module_edit.reqs.module = "(admin|cron|ajax)"
routes.module_edit.reqs.action = "(edit|view|delete)"
routes.module_edit.reqs.id = "\w+"

; モジュールのページング
routes.module_page.type = "Zend_Controller_Router_Route"
routes.module_page.route = ":module/:controller/page/:page/*"
routes.module_page.defaults.module = "default"
routes.module_page.defaults.controller = "index"
routes.module_page.defaults.action = "index"
routes.module_page.reqs.module = "(admin|cron|ajax)"
routes.module_page.reqs.page = "\d+"

; モジュールのページング&ソーティング
routes.module_page_sort.type = "Zend_Controller_Router_Route"
routes.module_page_sort.route = ":module/:controller/page/:page/:order_sort/:order_direction/*"
routes.module_page_sort.defaults.module = "default"
routes.module_page_sort.defaults.controller = "index"
routes.module_page_sort.defaults.action = "index"
routes.module_page_sort.reqs.module = "(admin|cron|ajax)"
routes.module_page_sort.reqs.page = "\d+"
routes.module_page_sort.reqs.order_sort = "\w+"
routes.module_page_sort.reqs.order_direction = "(asc|desc)"

元々はモジュール別にルーティング設定を記述していましたが、
一つの設定で複数のモジュール情報をまとめるように修正しました。


余談ですが、次のようにルーティング設定をすると
トップページにアクセスした時にこの設定が引っかかるようになり、
defaultモジュールにアクセスしてくれませんでした。

routes.module.type = "Zend_Controller_Router_Route"
routes.module.route = ":module/:controller/:action/*"
routes.module.defaults.module = "admin"
routes.module.defaults.controller = "index"
routes.module.defaults.action = "index"
routes.module.reqs.module = "(admin|cron|ajax)"

モジュールのデフォルト設定がadminになっています。

http://localhost/target_dir/

このようにトップページでアクセスしてもこの
ルーティング設定にヒットし、adminモジュールへのアクセスとなってしてしまいました。

ここはデフォルトのモジュールをdefaultによる事で対応できましたが、
どうもルーティングの変数は空欄でもそれを判定に含むような仕様になっているようです。

TrackBack URL :

Leave a comment  

name

email

website

Submit comment