2017-03-02 127 views
3

,我发现自己被卡住或文档丢失!Laravel 5.4路由与要求,而params

我使用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:用放慢参数路由在 - 航线/ web.php

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

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

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', 
    ]); 
} 

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

回答

12

public function edit(Request $request, $id) 

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

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

但是,您可以通过全局辅助函数request()访问它,如果你不想把它作为一个函数参数。

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

谢谢!一旦时间流逝,我会标记它! :) – JREAM

+3

我想补充一点,使用依赖注入(其中作为一种暗示说法是好(更好)的做法。 – fubar

+0

大咨询'$ request'传递@Rob – JREAM