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 发送 POST 请求

在 Laravel 中发送带有 json 对象数据的 post 请求

如何在http post请求中发送参数以获取laravel中的数据

如何使用 Postman 处理 Laravel $_POST 请求

使用 Guzzle 将数据和文件一起发布到 Laravel API

Laravel 5.1 AJAX - 即使我发送 POST 请求,也不允许返回 405 GET 方法