다음 입문 튜토리얼 칼럼은 Laravel에서 마법의 라라벨 매크로(Macro)를 소개하는 글이 필요한 친구들에게 도움이 되길 바랍니다!
Laravel의 기능을 원했지만 실제로는 존재하지 않았던 적이 있나요? Laravel 매크로를 소개하겠습니다. 매크로를 사용하면 Laravel의 내부 구성 요소에 사용자 정의 기능을 추가할 수 있습니다.
간단한 Request 파사드 메소드를 예로 들어보겠습니다.
Request::macro('introduce', function ($name) { echo 'Hello ' . $name . '!'; }); Request::introduce('Caleb'); // outputs "Hello Caleb!"
현재 TLD(최상위 도메인: .com, .net, .org, .etc...)를 감지하는 데 보다 실용적인 요청 매크로가 사용됩니다.
Request::macro('tldIs', function ($tld) { return Str::is('*.' . $tld, $this->root()); }); Request::tldIs('com') // returns true for app.com Request::tldIs('dev') // returns false for app.com
Laravel은 $this를 이미 매크로를 정의한 클래스가 아닌 요청 컨텍스트에 자동으로 바인딩한다는 것을 알 수 있습니다. 예:
class AppServiceProvider { public function boot() { Request::macro('context', function () { return get_class($this); } } ... Request::context(); // returns 'Illuminate\Http\Request' // instead of 'App\AppServiceProvider'
좀 더 고급 예를 살펴보겠습니다. 이 매크로는 현재 TLD를 기반으로 모델에 where 문을 조건부로 추가합니다.
Builder::macro('whenTldMatches', function($tld, $callback) { if (Request::tldIs($tld)) { call_user_func($callback->bindTo($this)); } return $this; }); SomeModel::whenTldMatches('org', function () { $this->where('id', '>', 5); })->get(); // applies ->where() 在 app.org 上应用,而不在 app.com 上应用
어디에서 정의해야 할까요?
서비스 제공업체는 애플리케이션에 대한 매크로를 정의하기에 좋은 곳입니다. AppProvidersAppServiceProvider boot()
는 I
좋은 주입 지점이지만 빨리 부풀어오르게 됩니다. AppProvidersAppServiceProvider boot()
是 I
一个很好的注入点,但是它很快就变得臃肿。
下一步是创建一个 AppProvidersMacrosServiceProvider
并注册在 config/app.php
里。 如果某宏与之相关,我可能会创建一个 AppProvidersTldAwareServiceProvider
来容纳所有与 TLD
AppProvidersMacrosServiceProvider
를 생성하고 config/app.php
에 등록하는 것입니다. 매크로가 관련되어 있는 경우 TLD
와 관련된 모든 매크로를 보유하기 위해 AppProvidersTldAwareServiceProvider
를 생성할 수 있습니다. 어떤 구성 요소가 매크로 가능합니까?
Macros는 Macroable 속성이 있는 모든 클래스에서 정의할 수 있습니다. 다음은 매크로 가능한 파사드 및 클래스 목록입니다.● IlluminateCacheRepository
● IlluminateConsoleSchedulingEvent● IlluminateDatabaseEloquentBuilder● IlluminateDatabaseEloquentRelation● IlluminateDatabaseQueryBuilder● IlluminateFilesystemF ilesystem● IlluminateFound ationTestingTestResponse● IlluminateHttpRedirectResponse● IlluminateHttpRequest● IlluminateHttpUploadedFile
● IlluminateRoutingResponseFactory ●IlluminateRoutingRouter ● IlluminateRoutingUrlGenerator● IlluminateSupportArr● IlluminateSupportCollection● IlluminateSupportStr● IlluminateTranslationTranslator● IlluminateValidationRule실습
찾은 경우 시스템 전반에 걸쳐 Laravel 구성 요소에 대한 논리를 반복하고 있다면 보다 효율적으로 매크로를 사용하는 것을 고려해보세요. 표현과 재사용이 좋습니다. 저를 믿으십시오. 매우 욕심이 많습니다. 행운을 빕니다! 더 많은 laravel 프레임워크 기술 기사를 보려면 laravel튜토리얼을 방문하세요!위 내용은 라라벨 매크로의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!