Laravel view composer로 논리를 한 군데로 정리해주세요!

9274 단어 PHPLaravel

이 문장에 관하여


줄거리


당사의 서비스 개발에서 사용자 정보를 공동으로 사용하는 곳이 있습니다. 그 부분이 복잡한 글쓰기로 바뀌었기 때문에 처리를 한 곳으로 정리하고자 합니다.

하고 싶은 일

  • user 정보를 공동으로 사용하는 유니버설화.
  • 제목의blade 파일 외에 사이드바 등에서user 정보를 사용하고 싶습니다.
  • 시도해 본 일

  • Laravelview composer를 사용하여 처리를 유니버설화합니다.
  • view composer란 무엇입니까?


    보기 구성 요소는 보기를 렌더링할 때 호출되는 리셋 또는 클래스 방법입니다.뷰를 렌더링할 때마다 결합할 정보가 있으면 뷰 구성 요소가 논리를 한 위치로 결합하는 데 도움이 됩니다.

    처리 이미지 맵



    언제 써요?

  • 사이드바 등 모든 페이지에 공통된 데이터를 표시하려면
  • 가능하다면 컨트롤러에 쓰고 싶지 않습니다. 템플릿도 논리를 넣지 않고 예쁜 html를 유지하고 싶습니다.
  • 컨트롤러가 비대해지는 것을 방지한다.
  • 구현 방법


    구현 단계

  • ① 서비스 공급업체 준비
  • ②app/config.등록php
  • ③ Composer 클래스 제작
  • ④ ServiceProvider 설정
  • ⑤blade 파일 수정
  • ① 서비스 공급업체 준비

    $ php artisan make:provider ViewComposerServiceProvider 서비스 공급자를 생성합니다.
    
    <?php
    
    namespace App\Providers;
    
    use Illuminate\Support\ServiceProvider;
    use View;
    
    /**
     * Class ViewComposerServiceProvider
     * @package App\Providers
     */
    class ViewComposerServiceProvider extends ServiceProvider
    {
        /**
         *
         */
        public function boot()
        {
        }
    
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    

    ②app/config.등록 php


    config/app.php에서 ServiceProvider 등록
    <?php
    
    'providers' => [
            App\Providers\ViewComposerServiceProvider::class,
        ],
    
    

    ③ Composer 클래스 제작


    "app/Http/ViewComposers"형식으로 디렉터리를 만들고 ViewComposers 디렉터리에 "LayoutComposer.php"를 만듭니다.
    <?php
    
    namespace App\Http\ViewComposers\User\Worker;
    
    use Auth;
    use Illuminate\View\View;
    
    /**
     * Class LayoutComposer
     * @package App\Http\ViewComposers\User\Worker
     */
    class LayoutComposer
    {
        /**
         * @param View $view
         */
        public function compose(View $view)
        {
            $view->with([
                'loginUser' => Auth::user(),
            ]);
        }
    
    }
    

    ④ ServiceProvider 설정


    보기::composers 방법으로 boot 방법의view에 값을 전달하는 ViewComposer를 지정합니다.
    <?php
    
    namespace App\Providers;
    
    use App\Http\ViewComposers\User\Agent as Agent;
    use App\Http\ViewComposers\User\FriendRecommendComposer;
    use App\Http\ViewComposers\User\Worker as Worker;
    use Illuminate\Support\ServiceProvider;
    use View;
    
    /**
     * Class ViewComposerServiceProvider
     * @package App\Providers
     */
    class ViewComposerServiceProvider extends ServiceProvider
    {
        /**
         *
         */
        public function boot()
        {
            View::composers([
                Agent\LayoutComposer::class => 'agent.*',
                Worker\LayoutComposer::class => 'worker.*',
                FriendRecommendComposer::class => 'user.friend_recommend.block',
            ]);
        }
    
        /**
         * Register any application services.
         *
         * @return void
         */
        public function register()
        {
            //
        }
    }
    
    

    ⑤ 블레이드 파일 수정


    $loginUser 변수를 해당 위치에 쓰기
    <?php
                    <div class="user-block">
                        <div class="img-wrap">
                            <img src="{{ $loginUser->userProfile->image->url }}" alt="">
                        </div>
                        <div class="user-name">{{ $loginUser->userProfile->display_name }}</div>
                        <div class="user-type">{{ \App\Enums\UserRole::toJapanese($loginUser->userProfile->role) }}</div>
                    </div>
    
    

    총결산

  • 공동으로 사용하는 변수와 논리가 있다면viewcomposer로 정리하자!
  • 참고문

  • https://readouble.com/laravel/5.5/ja/views.html
  • 좋은 웹페이지 즐겨찾기