2017-02-19 4 views
0

컨트롤러를 만들 때 유효성 검사 규칙을 주입 된 저장소에서 가져 오는 것이 바람직하지 않습니까? 이 기능의 사용이 컨트롤러의 store 방법에서 발견 될 것입니다 그리고비즈니스 계층에서 검색 한 컨트롤러에 대한 유효성 검사 규칙

interface UserRepository 
{ 
    /** 
    * @return array 
    */ 
    public function getCreateRules(); 
} 

: 예를 들어, 다음과 같은 인터페이스를 고려

class UserController extends Controller 
{ 
    private $repo; 

    public function __construct(UserRepository $repo) 
    { 
     $this->repo = $repo; 
    } 

    public function store(Request $request) 
    { 
     $this->validate($request, $this->repo->getCreateRules()); 

     ... 
    } 
} 

내 질문은 경우 비즈니스 계층에 규칙을 이동하여 그것은 우려를 혼합하고있다. 아이디어는 this 2014 년 중간 게시물이므로 나이가 주어진 유효한 리소스인지 궁금합니다.

+0

어떤 규칙을 다시 보내야하는지에 대한 저장소에 조건부 논리가 있습니까? –

+0

조건부 논리가 없습니다. – JRLambert

답변

2

개인적으로 저장소를 사용하지 않고 대신 FormRequest을 사용합니다.

https://laravel.com/docs/5.4/validation#form-request-validation

이 방법 : 당신이 코드있어

  1. 은 여전히 ​​재사용
  2. 는 모든 내장
  3. 의 당신은 또한 논리를 만들 필요가 없습니다 당신은 사용할 수 있습니다 유형 힌트를 사용하여 컨테이너에서 클래스를 해결하면 자동으로 메소드의 유효성 검사를 처리합니다.

또한 작성 및 업데이트를 위해 규칙을 다르게해야하는 경우 간단한 switch 문을 사용할 수 있습니다.

다음과 같이 보일 것
public function rules() 
{ 
    switch ($this->method()) { 
     case 'GET': 
      return [ 
       //Create rules 
      ]; 
     case 'PUT': 
     case 'PATCH': 
      return [ 
       //Update rules 
      ]; 
    } 
} 

당신 store 방법이 도움이

public function store(UserRequest $request) 
{ 
    //Validation will have already been handled by this point so you 
    //don't need to add it manually 
    ... 
} 

희망을!

+0

환상적입니다. 나는 그 존재를 몰랐다. 고맙습니다. – JRLambert

+0

@ JRLambert 괜찮습니다. 다행히 도울 수있어. –