Laravel 路由参数和表单参数

Posted

技术标签:

【中文标题】Laravel 路由参数和表单参数【英文标题】:Laravel Route Params and Form Params 【发布时间】:2014-07-21 21:12:42 【问题描述】:

我在 Laravel 中有一个后端,它基本上是一个 REST API,因为我在 FronEnd 中使用 AngularJS 并发出 ajax 请求。

假设我必须为用户制作一个简单的 CRUD

而且我不知道将某些参数放在Route本身或将它们全部放在Form Input中是否有任何区别。

例如:

Route::post('/Users/Update', 'UsersController@update);

然后调用 'id' 参数 from:

Input::get('id')

Route::post('/Users/Update/:id', 'UsersController@update);

并将其作为函数更新的参数包括:

public function update($id)  

这两种方式有什么真正的区别吗?也许安全问题?编码标准?还是一样?

我应该只使用 Laravel 的 REST 控制器吗?

【问题讨论】:

【参考方案1】:

如果你正在构建一个 REST API,你应该有一个类似 example.com/posts/42 的 URL,而不是 example.com/posts?id=42,因为它更简洁并且是一个编码标准。

我还会在您的 URL 中删除大写字符,并且肯定会选择您的第二个实现选择。顺便说一句,如果您需要更新用户,您应该使用这样的 PUT 请求:PUT users/:id

【讨论】:

我只是在阅读有关 PUT 和 DELETE 的内容,因为我之前听说过有不安全的但我不知道他们说过。 @GabrielMatusevich 为什么他们会不安全?它们与其他 HTTP 方法一样安全。看看***选择正确的 HTTP 方法:en.wikipedia.org/wiki/… 我不确定,我认为某些浏览器不支持它们 @GabrielMatusevich 当您在表单中使用 PUT 方法时,Laravel 将表单中的 PUT 请求作为 POST 处理。但如果您正在构建 API,您可能会从其他服务器调用它/命令行界面/移动应用程序。他们完美地处理了这个! @GabrielMatusevich 我的 PUT 方法来源:laravel.com/docs/html#opening-a-form 它开始于:Since HTML forms only support POST...【参考方案2】:

简洁的一些固执己见的答案:

您应该将您的路线定义为:

Route::put('/users/:userId', 'UsersController@putUser');

您的public function putUser($userId) 应该在成功时返回204 No Content

推理:

我已将路由更改为 PUT 请求,以更严格地遵循 REST 原则。将控制器方法从update 更改为putUser 可以让我们更好地定义该方法打算做什么。虽然看起来微不足道,但如果您决定在未来实施更新,它将帮助您区分 PUTPATCH 更新。我在这里使用 PUT 作为方法,但您可以阅读有关 PATCH 与 PUT 的信息,并决定您希望在多大程度上遵循 REST 原则。

至于 laravel 的 RESTful 控制器,我觉得它们施加了限制并且没有增加任何真正的好处,所以对于 REST api,我不建议使用它们。

【讨论】:

以上是关于Laravel 路由参数和表单参数的主要内容,如果未能解决你的问题,请参考以下文章

如何在Laravel 5.2中将表单数据作为路由参数传递

当我尝试使用 laravel 发布表单时,控制台显示“不正确的整数值”。无法识别路由参数

Laravel 验证请求和 API 路由 POST 参数

Laravel 使用来自控制器的参数重定向路由

带有 url 参数的 Laravel 发布路由

如何使用 GET 方法将 GET 参数传递给 Laravel?