我是MVC的新手(这是我第一次在真实场景中使用),我对控制器(应该)如何工作有点困惑。
在阅读了Laravel文档后,我得出结论,对于一般任务,如处理加载网站(不同的网站连接在一起),页面,管理等。我需要RESTful控制器
对于简单的任务,它是有效的。它使用起来既简单又有趣。我有一个这样的路由:
Route::controller('admin', 'AdminController');
有像
这样的函数public function getProduct($id)
,它成功了。(用来得到一个特定的产品:../admin/product/1
)
现在我想要更复杂的东西。像
../sites/loadsite/mysite/mypage/mysubpage/123?myoption=yes
我该怎么做?我该如何开始,如何处理这个问题?我是否必须对每件事都使用Route::get()
,或者是否有"更好"的方法来做到这一点?
Laravel提供了"Resource Controllers" helper来为相应的控制器方法生成RESTful路由:
http://laravel.com/docs/controllers resource-controllers
您可以使用它轻松地为给定模型创建标准REST路由,或者,如laravel.com提供的示例所示,您可以只限制某些路由。他们提供的表格演示了给定的路径如何映射到给定的动作/控制器方法。
关于你给出的示例url: ../sites/loadsite/mysite/mypage/mysubpage/123?myoption=yes
,我将把问题分成两部分,url和查询字符串:
关于URL /sites/loadsite/mysite/mypage/mysubpage/123
。这不会被许多人认为是一个"RESTful"路线。您应该考虑的不是页面和子页面,而是模型,有时是子模型。避免深度嵌套路由通常被认为是最佳实践,这通常意味着任何深度超过一层的东西:/model/{id}/submodel/[id]
对于url结尾的查询字符串:?myoption=yes
: Laravel通过使用Input::get("Param")
函数提供对查询字符串参数的访问。你不必在你的路由中指定查询字符串参数,它们可以简单地在你的控制器方法中访问。
"更好"的方式是资源控制器-当然可以与路由前缀和过滤器(例如身份验证过滤器)等相结合。
在资源控制器的方法中,您可以检索额外的输入(示例的查询字符串中的选项),并使用验证和任何您想要的方式处理它。