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

작년에 5.0 인가 5.1버전에서 3달정도 라라벨 작업하다가 지금까지 닷넷 만지다가 왔습니다.

그때 묵시 컨트롤러였던가 라우터파일에 컨트롤러 넣고 

컨트롤러 파일안에서 getIndex, postSubmit 처럼 써먹었습니다만, 이번에 다시 라라벨 잡으면서 5.5나왔길래

도큐멘트 문서를 보니 리소스 컨트롤러 밖에 없네요?

버전 업 되면서 묵시 컨트롤러는 없어지고 리소스 컨트롤러가 완전히 규격이 됬나요??

제 기억이 맞다면

Route::controllers([
'transfer' => 'TransferController',
'general' => 'GeneralController',
'/' => 'GeneralController'
]);


위에 코드 처럼 하나로 묶어서도 선언이 됬었던거 같은데. 예전처럼 그대로 하니 

Attribute [controllers] does not exist.

아예 읽지도 못하네요.;;


Route:get Route:post같이 하나씩 추가하는건 5.5에도 아직 남아있는거 같던데..

리소스 컨트롤러 않쓰면 메서드 하나 추가 할때마다 get post 설정도 일일이 다 해줘야 하나요...

    CommentAdd your comment...

    2 answers

    1.  
      2
      1
      0
      • Route:controller() API는 쓰지 않는게 좋습니다. 이유가 있어서 DEPRECATED 됐고, 그 이유를 읽긴했는데, 기억도 안나고 찾을 수 없네요.
      • Route::resource() API가 있긴하지만, 저도 이렇게 많이 썼었지만, 요즘은 대형 서비스를 다루고 있어서 Route::get(), Route::post()처럼 하나씩 하나씩 따복 따복 쓰고 있습니다.
        하나씩 쓰는 이유는 ENDPOINT-REQUEST-CONTROLLER-SERVICE로 이어지는 SRP(단일 책임 원칙)을 지키고 가독성/유지보수 편의성을 유지하기 위해서 입니다. 즉, 라우팅이 최전방을 담당하고, 뒤에 숨겨진 로직을 찾아 들어갈 수 있는(Outside-in) 힌트이므로... 팀에 처음 합류한 개발자도 전체 로직을 쉽게 이해할 수 있게 하는 효과가 있기 때문입니다.
      • 이상의 내용은 제 의견일뿐이니, 프로젝트 규모에 따라, 비판적으로 이해하고 수용하셨으면 좋겠습니다.


      두 번째에 언급한 대형 서비스에서의 구현은 이런 식입니다. 참고로 남겨 놓습니다.

      // routes/api.php
      Route::get('/', ListProductController::class);
      
      
      // ListProductRequest.php
      class ListProductRequest extends BaseRequest
      {
          public function rules() {...}
          public function getProductSearchParam() {...}
      }
      
      
      // ProductSearchParam
      class ProductSearchParam {/*생성자와 Getter(+가끔 Setter)만 있는 데이터 객체*/}
      
      
      // ListProductController.php
      class ListProductController extends Controller
      {
          final public function __invoke(
              ListProductRequest $request,
              ProductRepository $repository,
              Response $presenter
          ) {
              $paginatedProductCollection = $repository->findBySearchParam(
                  $request->getProductSearchParam()
              );
      
              return $presenter->withPagination(
                  $paginatedProductCollection,
                  new ProductTransformer
              );
          }
      }
      
      
      // EloquentProductRepository.php
      class EloquentProductRepository implements ProductRepository
      {
      public function findBySearchParam(ProductSearchParam $param) : LengthAwarePaginator
      {
          $builder = Product::query();
      
          if ($keyword = $param->getKeyword()) {
              $builder->where(...);
          }
      
          $priceRange = $param->getPriceRange();
      
          if ($priceRange->getBottom() !== null) {
              $builder->where(...);
          }
      
          if ($priceRange->getTop() !== null) {
              $builder->where(...);
          }
      
          return $builder->orderBy($param->getSortBy(), $param->getSortDirection())
              ->paginate($param->getSize(), ['*'], 'page', $param->getPage());
      }
        CommentAdd your comment...
      1.  
        1
        0
        -1

        https://github.com/shrimpwagon/laravel-route-controller

        요 패키지 한번 확인해보세요.

          CommentAdd your comment...