2017-12-18 188 views
0

是否可以將Illuminate\Http\Request轉換爲您使用php artisan make:request MyRequest進行的自定義驗證請求?轉換請求到自定義驗證請求

我想驗證,以發生在方法的道路,使我有:

protected function register(Request $request) 
{ 
    ... 
    $this->userRepository->signup($request) 
    ... 
} 

用戶信息庫:

public function signup(MyRequest $request) 
{ 
    ... 
} 

這可能嗎?我現在正在收到一個錯誤,因爲預計會有一個類。唯一想到的就是製作一個界面,但我不確定它是否可以正常工作。

錯誤,我得到

Type error: Argument 1 passed to UserRepository::signup() must be an instance of App\Http\Requests\MyRequest, instance of Illuminate\Http\Request given

+0

這應該工作,如果你添加myRequest到控制器 – madalinivascu

+0

myRequest是擴展請求類,所以這應該工作 – madalinivascu

+0

檢查出我的更新問題 – Norgul

回答

0

我沒有發現即使用我的自定義類擴展Request也沒有可能做我想要的,因爲自然地,一個方法在獲得另一個類時需要一個類的實例。

也許它可能會提取一個接口幷包裝和綁定它,但這在我看來是一個quickfix。

我的觀點是,我從一開始就錯了,它更多的是一個架構問題,所以我將我的應用程序轉換爲不同的方法,並設法避免這樣的問題。

0

是的,有與無的問題,您應該創建:

<?php 

namespace App\Http\Requests; 

use Illuminate\Foundation\Http\FormRequest; 

class MyRequest extends FormRequest 
{ 
    public function rules() { 
     // here you put rules 
    } 
} 

,並在你的控制器:

public function signup(\App\Http\Requests\MyRequest $request) 
{ 
    ... 
} 

注意你還應該在你的請求中調整authorize方法ST類(返回true或false取決於用戶訪問)

編輯

更新後 - 你應該輸入提示在控制器和存儲庫自定義類 - 它是由你 - 我經常使用通用Illuminate\Http\Request ,所以你應該做的:

在控制器:

public function controllerMethod(\App\Http\Requests\MyRequest $request) 

在倉庫:

public function signup(\App\Http\Requests\MyRequest $request) 

public function signup(\Illuminate\Http\Request $request) 

所以總結起來,你應該在控制器使用表格請求類 - 這是驗證將進行的地方,以後你可以使用同一個類或通用\Illuminate\Http\Request - 我個人經常在\Illuminate\Http\Request中使用版本庫或服務,因爲他們通常不關心放入MyRequest類的其他東西 - 他們只是想從請求類中獲取數據,就是這樣。

+0

我不認爲你明白我要求。當我將照明請求轉發到以MyRequest爲參數的方法時,我收到錯誤 – Norgul

+0

這是因爲您在那裏傳遞了無效對象。在控制器中你應該有一個公共函數controllerMethod(\ App \ Http \ Requests \ MyRequest $ request)',然後在控制器方法中可以使用:'$ this-> userRepository-> signup($ request)'沒有任何問題。現在你在控制器中使用'\ Illuminate \ Http \ Request',所以它不會工作,正如我在我的回答中所解釋的 –

+0

我知道我在傳遞什麼:)我正在尋求一種可能的解決方法。我知道這些是兩個不同的類:) – Norgul