为什么laravel不能直接访问控制器方法呢?
刚用laravel,不能理解为什么它不能像thinkphp、ci那种直接通过地址访问控制器方法,还需要为每天方法设置路由,或者用restful路由在每个方法前面加上get/post,这样不是很麻烦么? 请问这样设计的思路是什么?
12 个评论
首先:下回不要把问题再发布成文章了。
接下来回答你的问题:
www.myapp.com/a3ky
www.myapp.com/post/21/comment/1/edit
username.myapp.com/blog
请尝试用 thinkphp 实现一下用这几个 url 来访问你的控制器,并分别取得对应的参数:
a3ky
21 和 1
username
还有更高能的:
www.myapp.com/demo.doc
www.myapp.com/demo.jpg
这些也都可以直接指向控制器的方法。
如果以上这些你都可以用弱化路由的框架轻松实现的话,那你就没有必要纠结这个问题了。
接下来回答你的问题:
www.myapp.com/a3ky
www.myapp.com/post/21/comment/1/edit
username.myapp.com/blog
请尝试用 thinkphp 实现一下用这几个 url 来访问你的控制器,并分别取得对应的参数:
a3ky
21 和 1
username
还有更高能的:
www.myapp.com/demo.doc
www.myapp.com/demo.jpg
这些也都可以直接指向控制器的方法。
如果以上这些你都可以用弱化路由的框架轻松实现的话,那你就没有必要纠结这个问题了。
@FiveSay , TP采用的方法是指定路由格式,限制完后只能按框架提供的几种格式之一进行访问,其实相当于说框架制定了规则。
而laravel的路由灵活得多。在 TP 下束缚习惯了到 laravel 就会不适应。就是这样。
而laravel的路由灵活得多。在 TP 下束缚习惯了到 laravel 就会不适应。就是这样。
@FiveSay,@qufo : thinkphp,codeigniter都有正则路由功能 上面那些都能实现啊?
'/^(a3ky)$/i' => 'Default/Test/a1?v=:1',
'/^post\/(.*)\/comment\/(.*)\/edit$/i' => 'Default/Test/edit?post=:1&comment=:2',
'demo.doc' => 'Default/Test/f1'
...
'/^(a3ky)$/i' => 'Default/Test/a1?v=:1',
'/^post\/(.*)\/comment\/(.*)\/edit$/i' => 'Default/Test/edit?post=:1&comment=:2',
'demo.doc' => 'Default/Test/f1'
...
其实你说的这个确实是laravel了一个欠缺,laravel的路由模式以及很多思想都是来源于rails。在rails里面是有这样一个路由的 match ':controller(/:action(/:id))(.:format)' 这个就是用来匹配所有controller和控制器的。跟你说的其他的一些限定式的框架路由效果一样。但是又比他们多了一些优势,就是路由传参。