질문을 삭제하지 말아주세요.!
 
1
0
-1
trait ValidatesRequests
trait ValidatesRequests
{
    public function validate()
    {
    }
}
class Controller
class Controller 
{
    use ValidatesRequests;
}
trait AuthValidatesRequests
trait AuthValidatesRequests
{
    public function validate()
    {
    }
}
class LoginController
class LoginController extends Controller
{
      use AuthValidatesRequests;
}

 

Controller 는  ValidatesRequests  Trait 사용하고

LoginController  는   AuthValidatesRequests Tragit 사용하고

 

ValidatesRequests  , AuthValidatesRequests  에는   같은 validate 라는 메소드가 있으면

 

LoginController  가 Controller를 상속하고 있으니 validate 메소드는 Override 되어야 할것 같은데,
Override  가 안되고 오류가 나네요?

 

Declaration of App\Http\Validation\AuthValidatesRequests::validate(Illuminate\Support\Facades\Request $request, array $rules, array $messages = Array, array $customAttributes = Array) should be compatible with App\Http\Controllers\Controller::validate(Illuminate\Http\Request $request, array $rules, array $messages = Array, array $customAttributes = Array)

 

 

    CommentAdd your comment...

    1 answer

    1.  
      2
      1
      0

      두개의 파라미터가 완전히 다르게 인지되고 있습니다.

      (Illuminate\Support\Facades\Request $request, array $rules, array $messages = Array, array $customAttributes = Array) 

      (Illuminate\Http\Request $request, array $rules, array $messages = Array, array $customAttributes = Array)

       

      첫번째 파라미터가 아래와 같이 다릅니다. 어느것을 쓰실건지 통일시켜야 할 것 같습니다.

       

      Illuminate\Support\Facades\Request

      Illuminate\Http\Request

       

      결론은 traits 문제가 아닌것 같네요.

      1. taelkim

        음... 전달이 잘 안된것 같습니다.

        1. 오버로딩은 불가능합니다. 아시죠?
        2. 오버라이딩 이전에 오버로딩을 시도하기때문에 발생하는 오류입니다.

        이건 trait 을 빼고 해도 마찬가지입니다. 오버로딩을 시도하고 있는 코드이기 때문이죠.

        예제는 정상인데 주신 코드에는 오버로딩을 시도하고 있습니다. 오류 메시지를 다시한번 확인해 보시면 이해가 쉬울것 같아요. (미묘하게 다릅니다. 오타같아요.)

         

      2. taelkim

        Warning: Declaration of traitB::hello(ParamB $b) should be compatible with A::hello(ParamA $a) in /Users/tael/tmp/traits.php on line 6


        class A
        {
            use traitA;
        }
        class B extends A
        {
            use traitB;
        }
        class ParamA{}
        class ParamB{}
        trait traitA
        {
            public function hello(ParamA $a){}
        }
        trait traitB
        {
            public function hello(ParamB $b){}
        }
        
        
        
        
        (new B())->hello(new ParamB);

         샘플로 동일한 에러를 발생시키도록 만들어 봤습니다.

        메소드는 같은 이름인데, 파라미터가 다르거든요. 오버로딩을 시도하게 되버린거죠.

      3. 매그니토

        아넵 맞네요 

        trait 가 문제가 아니고   validate 파라미터가 부모하고 달라서 생기는 문제이네요.

        오류내용을 자세히 확인해야 하는데 ㅎㅎㅎ

         감사합니다. ^^

      CommentAdd your comment...