Laravel 확장 방법

등록 서비스


컨테이너에 서비스 등록
//  
$container->bind('log', function(){
    return new Log();
});
//  
$container->singleton('log', function(){
    return new Log();
});

확장 바인딩


기존 서비스 확장
$container->extend('log', function(Log $log){
    return new RedisLog($log);
});

Manager


Manager는 사실상 하나의 공장으로 서비스에 구동 관리 기능을 제공한다.
Laravel의 많은 구성 요소는 Manager를 사용합니다. 예를 들어 Auth, Cache, Log, Notification, Queue 등등 모든 구성 요소에는 Redis 관리자가 있습니다.우리는 이 관리자를 통해 서비스를 확장할 수 있다.
예를 들어, 만약에 우리가 xxxManager 서비스 지원Cache을 구동시키려고 한다면, 우리는 RedisCache 서비스에 Cache 구동을 확장할 수 있다.
Cache::extend('redis', function(){
    return new RedisCache();
});

이때 redis 서비스는 Cache 이 드라이브를 지원한다.이제 redis 을 찾아 config/cache.php 옵션의 값을 default 로 변경합니다.이때 우리가 redis 서비스를 다시 사용할 때, Cache 드라이브를 사용하여 캐시를 사용합니다.

Macro 및 Mixin


어떤 상황에서 우리는 하나의 유형 동태에 몇 가지 방법을 추가해야 한다. RedisCache 또는 Macro 이 문제를 잘 해결했다.
Laravel 밑바닥에는 Mixin라고 불리는 Macroable가 있는데 Trait 클래스를 도입하면 MacroableMacro 방식의 확장을 지원한다. 예를 들어 Mixin, Request, Response, SessionGuard, View, Translator 등이다.Macroable는 두 가지 방법을 제공했다. macromixin, macro 방법은 클래스에 하나의 방법을 추가할 수 있고, mixin 클래스에 하나의 방법을 혼합하는 것이다.
예를 들어 우리는 Macroable류에 두 가지 방법을 추가해야 한다.Request 메서드를 사용하는 경우:
Request::macro('getContentType', function(){
    //  $this Request 
    return $this->headers->get('content-type');
});
Request::macro('hasField', function(){
    return !is_null($this->get($name));
});

$contentType = Request::getContentstType();
$hasPassword = Request::hasField('password');
macro 메서드를 사용하는 경우:
class MixinRequest{
    
    public function getContentType(){
        //  
        return function(){
            return $this->headers->get('content-type');
        };
    }
    
    public function hasField(){
        return function($name){
            return !is_null($this->get($name));
        };
    }
}

Request::mixin(new MixinRequest());

$contentType = Request::getContentType();
$hasPassword = Request::hasField('password');

좋은 웹페이지 즐겨찾기