Laravel:使用 POST 请求将数据发送到控制器方法
Posted
技术标签:
【中文标题】Laravel:使用 POST 请求将数据发送到控制器方法【英文标题】:Laravel : send data to a controller method with a POST request 【发布时间】:2015-03-30 14:10:13 【问题描述】:我在routes.php
文件中设置了这样的嵌套资源:
Route::resource('channels','ChannelsController');
Route::resource('channels.posts','PostsController');
所以当我想显示给定频道上的所有帖子时,我会从 URI 中获取频道 ID:
GET /channels/channelId/posts
用方法:
// PostsController.php
/**
* Display a listing of the resource.
* GET channels/channelId/posts/
* @return Response
*/
public function index($channelId)
...
但是当我想 POST 时,通道 id 不会传递给 store 方法
// PostsController.php
/**
* Store a newly created post whithin a channel
* POST channels/channelId/posts/
* @return Response
*/
public function store($channelId)
... // $channelId is not set
我知道有一个解决方案,通过表单中的隐藏字段传递数据,但这并不安全,因为任何人都可以编辑它并发布错误的 ID。 如果您有任何解决方案,请告诉我。
【问题讨论】:
$channelId
未在 PostsController::store()
方法中设置没有意义。它必须根据您为路由、控制器和 url 显示的内容进行设置。
另外,请考虑您的表单发布到的 url 与您的表单输入一样容易受到修改。一切都应该在服务器端进行验证,以确保输入有意义。
由于是资源控制器,store
使用 POST 作为 http 动词。
尝试阅读(路由模型绑定)
【参考方案1】:
其实我在 Laravel documentation 本身就找到了解决方案,这里是为了让大家可以从中受益:
Form::open(array('action' => array('Controller@method', $user->id)))
$user->id
作为参数传递给方法method
,最后一个也应该接收一个参数,就像这样:method($userId)
【讨论】:
以上是关于Laravel:使用 POST 请求将数据发送到控制器方法的主要内容,如果未能解决你的问题,请参考以下文章
在 Laravel 中发送带有 json 对象数据的 post 请求
如何在http post请求中发送参数以获取laravel中的数据
如何使用 Postman 处理 Laravel $_POST 请求