【问题标题】:Laravel 5.4 Route with Request and ParamsLaravel 5.4 带有请求和参数的路由
【发布时间】:2017-07-21 13:44:48
【问题描述】:

我发现自己陷入或迷失在文档中!

我正在使用 Laravel 5.4 并且 我正在尝试在需要请求对象的控制器中创建验证

我的问题是我的路由传递参数,我在文档中找不到如何在 Controller 方法中包含 Request $request 参数和 $id 参数的示例。

这是我的例子:

1:SomeController.php

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
...
public function edit($id) {
    $request = Request; // <-- Do I use that instead of passing an arg?
}

2:在--routes/web.php中带有参数的路由

Route::match(['GET', 'POST'], '/some/edit/{id}', 'SomeController@edit');

在他们的示例@https://laravel.com/docs/5.4/requests#accessing-the-request 中,他们的控制器中有Request $request 这个,但是路由参数会发生什么?

public function store(Request $request) {}

问题:我是否需要编辑路由,或者如果是请求,第一个参数是否会被忽略?


答:或者我会在 **SomeController.php 中这样做吗?**

public function edit(Request $request, $id)
{
    // I would get the $request, but what happens to $id?
    $this->validate($request, [
        'title' => 'required|unique:posts|max:255',
    ]);
}

B:也许,像这样?:

public function edit($id)
{
    // Or Request::getInstance()?
    $this->validate(Request, [
        'title' => 'required|unique:posts|max:255',
    ]);
}

任何建议都会有所帮助,甚至是一个例子!

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    在做

    public function edit(Request $request, $id)
    

    应该与您已有的路线相匹配。所以可以这样做。 Request $request 这里不是您传递的必需参数。 Laravel 会处理它。

    它是这样工作的,因为每次您发送请求时,Laravel 都会为您“发送”一个请求(GET、POST)。所以,它一直存在。但是,如果您不将它作为参数传递给控制器​​函数,则可以在控制器中使用它。

    但是,如果您不想将其作为函数参数传递,则可以通过全局帮助函数 request() 访问它。

    $request = request();
    $name = $request->name; // or 
    $name = request('name');
    

    【讨论】:

    • 我要补充一点,使用依赖注入($request 作为类型提示参数传递是一种很好(更好)的做法。
    • 很好的建议@Rob
    猜你喜欢
    • 2019-06-27
    • 2018-06-12
    • 2019-04-13
    • 1970-01-01
    • 2021-09-21
    • 2017-09-11
    • 2017-10-21
    • 2017-11-11
    • 2017-07-10
    相关资源
    最近更新 更多