2017-12-18 21 views
0

Illuminate\Http\Requestphp 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

이 – madalinivascu

+0

myRequest가 작동해야 할 것은 요청 클래스 그래서 이것이 내가 내 대답 – madalinivascu

+0

체크 아웃 작업을해야 확장 내가 묻고있어. MyRequest를 매개 변수로 사용하는 메서드에 Illuminate Request를 전달하면 오류가 발생합니다. – Norgul

답변

0

Request을 확장하는 사용자 정의 클래스로도 원하는 것을 수행 할 수 없다는 것을 알지 못했습니다. 자연스럽게 한 메소드가 다른 클래스를 가져 오는 동안 한 클래스의 인스턴스를 기대하기 때문입니다.

어쩌면 인터페이스를 추출하여 랩핑하고 바인딩 할 수도 있지만 제 의견으로는 quickfix가 될 것입니다.

제 생각에는 내가 처음부터 잘못 생각한 개념이었고 아키텍처 문제가 더 많아서 앱을 다른 접근 방식으로 변형하여 처음부터 그러한 문제를 피할 수있었습니다.당신이 당신의 컨트롤러에 myRequest 추가 한 경우

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) 
{ 
    ... 
} 

하는주의 당신은 또한 귀하의 reque에 authorize 메서드를 조정해야합니다 성 클래스는 (반환 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를 사용할 수 있습니다 - 제가 개인적으로 자주 그들은 단지 MyRequest 클래스에 넣어 다른 것들에 대해 상관하지 않기 때문에 저장소 또는 서비스 단지에서 사용 \Illuminate\Http\Request - 그들은 단지 요청 클래스에서 데이터를 얻고 싶습니다.

+0

업데이트되었습니다 난 당신이 이해 생각하지 않는 내 업데이트 질문 – Norgul

+0

잘못된 개체를 전달했기 때문입니다. 컨트롤러에는'public function controllerMethod (\ App \ Http \ Requests \ MyRequest $ request)'어딘가에 있어야하며, 컨트롤러 메소드에서는'$ this-> userRepository-> signup ($ request)'을 아무런 문제없이 사용할 수 있습니다. 이제 당신은 컨트롤러'\ Illuminate \ Http \ Request'를 사용하여 내가 내 대답에서 설명한대로 작동하지 않을 것입니다. –

+0

제가 전달하는 것을 알고 있습니다 :) 가능한 해결 방법을 요구하고있었습니다. 나는 그것들이 2 개의 다른 클래스라는 것을 알고있다 :) – Norgul