2017-03-02 129 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