【问题标题】:Laravel: Passing Default Values from Routes to ControllersLaravel:将默认值从路由传递给控制器
【发布时间】:2016-02-14 16:56:29
【问题描述】:

我正在创建一个简单的应用程序,它使用单个数据库表来存储帖子类型。为了便于描述,我将它们称为ArticleTweet

我试图弄清楚在创建新记录时如何将type 干净地传递给控制器​​。当然,我可以在表单中创建一个隐藏字段并在其中添加类型,但有人可以对其进行编辑,我们会以错误的类型保留记录。

我更愿意做这样的事情

Route::post('articles', 'PostsController@store')->where('type', 'article');
Route::post('tweets', 'PostsController@store')->where('type', 'tweet');

我尝试了上述方法,但在我的 PostsController 中不断收到错误。

这就是我想要实现的……

public function store($type, PostRequest $request)
{
    $input['type'] = $type;
    $input['title'] = $request->title;
    ...
}

我已经搜索和玩了很长一段时间,但找不到任何有用的东西。这可能吗?

【问题讨论】:

  • 为什么不为推文和文章创建不同的控制器
  • 关于此评论“当然,我可以在表单中创建一个隐藏字段并在其中添加类型,但有人可以对其进行编辑,我们会以错误的类型保留记录。”请注意,您无法控制通过表单发送到您的应用程序的内容。有人可以使用 POSTMan 和其他实用程序。进行适当的验证是您的责任
  • @Digitlimit 是的,绝对是,而且我确实在努力验证服务器端。我可以很容易地检查类型是什么,如果它不是有效的只是abort(405),那就可以了。只是寻找基于路线的东西(如果存在)。 :)

标签: routes laravel-5.2


【解决方案1】:

你似乎不明白where 是如何与路由一起工作的。

where 方法接受参数名称和定义如何约束参数的正则表达式:

例子:

Route::post('tweets/{type}',  'PostsController@store') ->where('type', '[A-Za-z]+');

我认为这是你需要的:

 Route::post('posts/{type}',  'PostsController@store') ;

要发布推文,请发送发布请求至:

posts/tweet

或者发布文章发送一个发布请求到。

posts/article

【讨论】:

    猜你喜欢
    • 2015-10-30
    • 2016-04-16
    • 2013-06-02
    • 1970-01-01
    • 1970-01-01
    • 2016-03-25
    • 2015-01-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多