A Package for Laravel Blade Extension Classes

블레이드 컴파일러에 등록 된 서비스 컨테이너에 블레이드 확장 클래스를 등록 할 수있는 블레이드 확장 패키지를 만들었습니다. 제공된 php artisan make:blade 명령 (자동 등록 패키지 명령 FTW)을 사용하여 새 블레이드 확장 클래스를 쉽게 만들 수도 있습니다.


이 개념은 어떤 방법으로도 혁명적이지는 않지만, 프로젝트 고유의 블레이드 확장을 서비스 컨테이너 클래스로 구성하는 방법을 좋아합니다.


예를 들어 장바구니 작업에 대한 맞춤 지침이 있다고 가정 해 보겠습니다. 다음은 Blade Extensions 패키지를 사용하여 어떻게 보이는지 보여주는 간단한 예제입니다.


<?php 

namespace App\Blade; use BitPress\BladeExtension\Contracts\BladeExtension; class CartExtension implements BladeExtension { public function getDirectives() { return [ 'cartcount' => [$this, 'getCartCount'] ]; } public function getConditionals() { return [ 'cartempty' => [$this, 'isCartEmpty'] ]; } public function getCartCount() { // logic to return cart count } public function isCartEmpty() { // logic for empty cart } } 



위의 확장은 블레이드에서 다음 지시문을 제공합니다.



{{-- Conditional --}} @cartempty <p>The cart is empty</p> @else <p>The cart is not empty</p> @endcartempty {{-- Directive --}} <span class="count">@cartcount</span> 



특별한 것은 아니지만 단지 PHP 호출 기능 일 뿐이지 만 서비스 (예 : 장바구니 서비스)를 주입하고 이러한 관련 확장을 하나의 파일로 그룹화하여 이익을 얻을 수있는 헌신적 인 클래스의 느낌을 좋아합니다.


장바구니에 추가 지시문을 추가해야하는 경우 getDirectives () 메소드를 업데이트하고 관련 호출 가능 함수를 정의하기 만하면됩니다.


이 패키지의 서비스 제공 업체가 Blade 컴파일러에 어떻게 연결되는지 흥미로울 수 있습니다. 꽤 간단합니다. boot () 메소드는 blade.extension으로 태그 지정된 모든 서비스를 가져 와서 컴파일러에 지시문을 등록합니다.



// In the BladeExtensionServiceProvider::boot() method foreach ($this->app->tagged('blade.extension') as $extension) { if (! $extension instanceof BladeExtension) { throw new InvalidBladeExtension($extension); } foreach ($extension->getDirectives() as $name => $callable) { $this->app['blade.compiler']->directive($name, $callable); } foreach ($extension->getConditionals() as $name => $callable) { $this->app['blade.compiler']->if($name, $callable); } } 



블레이드 확장 패키지를 사용하면 블레이드 확장을 서비스 컨테이너에 쉽게 만들고 등록 할 수 있습니다.


php artisan make:blade Cart 


그리고 이것은 제공된 BladeRegistrar 클래스로 서비스를 등록하는 방법입니다.



use App\Blade\CartExtension; use BitPress\BladeExtension\Container\BladeRegistrar; // ... BladeRegistrar::register(CartExtension::class, function () { return new CartExtension(); }); 



원하는 경우 제공된 헬퍼 메서드를 대신 사용할 수도 있습니다.



blade_extension(CartExtension::class, function () { return new CartExtension(); }); 



기본적으로 BladeRegistrar가 다음과 같은 작업을 수행합니다.



$this->app->singleton(CartExtension::class); $this->app->tag(CartExtension::class, 'blade.extension'); 



더 알아보기


이 패키지는 Twig 확장이 Symfony 프로젝트에서 생성되고 등록되는 방법에 영감을줍니다.


시작하려면 GitHub 프로젝트에서 Laravel 응용 프로그램에서 블레이드 확장을 만들기위한 전체 설치 지침 및 워크 플로를 확인하십시오.


다음을 사용하여 Blade Extensions 패키지를 설치할 수 있습니다.


composer install bitpress/blade-extensions 










Comments

글이 없습니다.
글이 없습니다.
반응형 구글광고 등
State
  • 현재 접속자 7 명
  • 오늘 방문자 16 명
  • 어제 방문자 189 명
  • 최대 방문자 420 명
  • 전체 방문자 105,027 명
  • 전체 게시물 333 개
  • 전체 댓글수 2 개
  • 전체 회원수 31 명
Facebook Twitter GooglePlus KakaoStory NaverBand