Laravel 5.4路线请求和参数

JRE*_*EAM 5 php laravel

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

我正在使用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?
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

public function store(Request $request) {}
Run Code Online (Sandbox Code Playgroud)

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


A:或者我会在**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',
    ]);
}
Run Code Online (Sandbox Code Playgroud)

B:也许,这样的事情?:

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

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

Edd*_*ove 15

public function edit(Request $request, $id)
Run Code Online (Sandbox Code Playgroud)

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

它的工作方式是这样的,因为每次发送请求时,Laravel都会向你发送一个请求(GET,POST).所以,它总是存在的.但是,如果您不将其作为参数传递给控制器​​功能,则可以在控制器中使用它.

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

$request = request();
$name = $request->name; // or 
$name = request('name');
Run Code Online (Sandbox Code Playgroud)

  • 我想补充一点,使用依赖注入(其中`$ request`作为类型提示的参数传递是好的(更好的)练习. (3认同)