【发布时间】: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 动词。 -
尝试阅读(路由模型绑定)
标签: forms post laravel laravel-4 laravel-routing