질문을 삭제하지 말아주세요.!
 
1
0
-1

메뉴얼 보면서 따라해보고있는데

php artisan make:request StorePost 를 만들어 놓고

컨트롤러에서 Store 에 추가하려고 보니

public function store(Request $request)

이상태 입니다 제가 알기로는

메뉴얼 대로라면

public function store() 이상태에서 제가 추가하려고 하는 validator를 넣으려

public function store(StorePost $request)

이렇게 만들어줘야하는데,,, 어떤식으로 만들어야 될까요 ㅠㅠ ?

그리고 request는 왜 StorePost안에 있는거죠 ?? 이해가 안갑니다 ㅠㅠ

왜 저자리 에 어떤 기능을 지금 하고있는 request 가 있는지도 좀 알려주시면 안될까요 ㅠ??


    CommentAdd your comment...

    3 answers

    1.  
      2
      1
      0

      음... 질문을 디코드 해봤는데요. 제가 이해 한 바로는 "php artisan make:request StoreRequest를 했는데, 왜 컨트롤러에서는 StoreController::store(StoreRequest $request)가 아니라, StoreController::store(Request $request)"로 보일러 플레이트가 되어 있냐인 것 같아요.

      StoreController의 store 함수에 인자로 App\Http\Requests\StoreRequest $request로 고쳐주시면 됩니다. 권윤학님 말씀대로 타입힌트만 정확히 주면, HTTP 요청에 해당하는 컨트롤러와 함수로 요청을 전달할 때, 타입힌트가된 컨트롤러 클래스를 생성하고, 생성된 함수로 요청을 보내면서, StoreRequest 객체도 만들어서 주입해 줍니다. 말이 어려운데 이렇게 쓰시면 됩니다.

      class StoreRequest extends ... 
      {
      	public function rules()
      	{
      		return [
      			// 유효성 검사 규칙 정의
      		];
      	}
      }
      
      
      Route::HTTP동사('URL엔드포인트', '컨트롤러@함수');
      
      class 컨트롤러
      {
      	public function 함수(StoreRequest $request)
      	{
      		// 유효성 검사를 통과하지 못했다면 아래 코드는 실행되지 않습니다.
      		dd($request->all());
      	}
      }



      1. getahead92

        힌트 감사드립니다ㅠㅠ 그런데 no message 라는 오류가 나오는데 ㅠㅠ


        어떤 오륜지 감이 안잡혀요 ㅠㅠ 도움좀 주시면 안될까요 ?? 

      2. 김주원

        no message라는 오류는 본 적이 없고요, 단편적인 정보로는 힌트를 드릴 수도 없습니다.


        힌트는 항상 로그 (storage/logs/laravel.log)에 있습니다.


        문제점을 재현을 한 후 로그에 찍힌 스택트레이스에서 첫 줄의 메시지에 표시된 파일:줄번호와 그 문제를 발생시킨 위치를 찾아서 해결하셔야 합니다. 전체 스택트레이스 중에서 프레임워크의 클래스@함수 호출이 아닌, 내가 짠 클래스@함수를 찾아보면 내가 뭘 잘못했는 지 찾을 수 있을 겁니다.

      CommentAdd your comment...
    2.  
      2
      1
      0
      public function store(Request $request)

      여기에 있는 Request 는 실제로는 Illuminate\Http\Request 라는 녀석으로, 라라벨에서 기본으로 사용하는 Request 클래스입니다.


      컨트롤러 상단에 보시면 

      use Illuminate\Http\Request;

      라고 적혀있는 것을 확인하실 수 있을거에요.


      현재 하시려고 하는 작업은 직접 만든 Request 클래스로 라라벨에서 기본으로 사용하는 Request 클래스를 대체하는 겁니다.

      따라서 아래와 같이 라라벨 기본 Request 클래스를 직접 만든 Request 로 바꿔주시면 됩니다.


      public function store(\App\Http\Request\StorePost $request)
      1. getahead92

        가르침 감사드립니다 ㅜㅜ 그런데 힌트 주신부분 반영해서 코딩을 했는데 


        No message 라는 오류가 나오는데요 ... 

        코딩이 잘못됫을까요 ? ㅠㅠ 오류 메세지에서 대충 뭐가 잘못됬을거같다 


        라는 감이 좀 와야대는데 저런 오류는 감이 안오는것같아요 ㅜㅜ 

        매번 질문 죄송하지만 이런 오류는 어떤종류에 오류일까요 ㅠㅠ ?? 

      CommentAdd your comment...
    3.  
      2
      1
      0

      Laravel에서 Route를 거쳐서 Controller로 넘어올때

      메서드에 Request 객체 타입힌팅이 되어 있으면 Request 객체에 접근이 가능합니다.(서비스 컨테이너에서 처리)

      https://laravel.kr/docs/5.5/requests#accessing-the-request

      Request 객체 대신 FormRequest 를 상속받은 객체가 있을 경우 해당 객체를 의존성 주입을 합니다.

      관련 소스는 Illuminate\Foundation\Providers\FormRequestServiceProvider 에서 확인 가능합니다.

      조금 용어가 어색하실 수 있지만 쉽게 생각하면 프레임워크 소스에서 Request::class or FormRequest::class 해당하는 타입힌팅이 매개변수로 있을 경우 접근 가능하도록 포함시켜줍니다.

      의존성 주입에 대해서는 아래의 링크에서 자세히 확인해보세요.

      http://modernpug.github.io/php-the-right-way/#dependency_injection

        CommentAdd your comment...