dongnuan7956 2011-10-07 06:50
浏览 37
已采纳

在默认的Zend路由中添加可选参数

I want to change the default route on my application to use an optional parameter via Bootstrap.php, not in the application.ini. I am having trouble setting up all "escape" routes, I even don't know If I need to set up several routes or if I can do with only one!

The route must be something like

":module/:area/:controller/:action"

where :area is optional and defaulted to "public"

So in any access to http://www.example.com/my_module/my_controller/my_action I can get via a FC plugin the following:

$request->getParam('area') = "public"

And in http://www.example.com/my_module/my_area/my_controller/my_action I get:

$request->getParam('area') = "my_area"

The main trouble is creating all routes so it escapes to default module, index controller and index action in case those are not passed too and loading http://www.example.com/ returns same as http://www.example.com/default/public/index/index.

And I want to use URL Helper to generate internal URL´s and it respects the correct assembly on this new Default Route.

Edit: I figured that default Route comes with a fail-safe for the module, if it don't exist it defaults to the controller, but how to mimic similar behavior for other parts of the URL and the module itself when creating it in the Bootstrap.

Can anybody give me some light or suggest where can I find an working example ?

  • 写回答

2条回答 默认 最新

  • dongyuqie4322 2011-10-07 14:39
    关注

    The solution was indeed to extend Zend_Controller_Router_Route_Abstract and create a new Route handler to go through the url, verify the existence of modules, areas, controllers and actions to build a full functional url or dispatch to the error controller.

    The heavy work is done between the match() and assemble() methods and I used as reference the Zend class Zend_Controller_Router_Route_Module tht do similar task for the module, but instead of verifying if module exists with the dispatcher I created a whitelist of allowed areas, if it fails to match, it considers that that path part is the controller, the next the action and further parts are parameters.

    It worked like magic!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部