RESTful控制器如何在Laravel 4中工作,如何正确使用它们


How do RESTful controllers work in Laravel 4, how to use them properly?

我是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")函数提供对查询字符串参数的访问。你不必在你的路由中指定查询字符串参数,它们可以简单地在你的控制器方法中访问。

"更好"的方式是资源控制器-当然可以与路由前缀和过滤器(例如身份验证过滤器)等相结合。

在资源控制器的方法中,您可以检索额外的输入(示例的查询字符串中的选项),并使用验证和任何您想要的方式处理它。