我发现自己陷入了困境或迷失在文档中!
我正在使用 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) {}
问题:我是否需要编辑路线?如果是请求,是否会忽略第一个参数?
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',
]);
}
B:也许,这样的事情?:
public function edit($id)
{
// Or Request::getInstance()?
$this->validate(Request, [
'title' => 'required|unique:posts|max:255',
]);
}
任何建议都会有所帮助,甚至是一个例子!
答案 0 :(得分:14)
否则
public function edit(Request $request, $id)
应该与您已有的路线相匹配。所以这样做是可以的。 Request $request
此处不是您传递的必需参数。 Laravel会照顾它。
它的工作方式是这样的,因为每次发送请求时,Laravel都会向您发送“请求”(GET,POST)。所以,它总是存在的。但是,如果您不将其作为参数传递给控制器功能,则可以在控制器中使用它。
但是,如果您不想将其作为函数参数传递,则可以通过全局帮助函数request()
访问它。
$request = request();
$name = $request->name; // or
$name = request('name');