2016-10-28 4 views
1

처음 laravel 패키지에서 작업 및 내 외관의 작동 방식에 문제로 실행, 현재 나의 사용은 다음과 같이 보입니다 내 서비스 제공을 설정할 때 내가 싱글 대신 바인드를 사용했습니다으로 클래스 인스턴스 :Laravel 사용자 정의 외관 새로운 인스턴스

public function register() 
    { 
     $this->registerCustom(); 
    } 

public function registerCustom(){ 
    $this->app->bind('custom',function() { 
     return new Custom(); 
    }); 
} 

내가 그렇게 모든 외관 호출하도록 할 필요가 뭔가 다른하려면 "사용자 정의"새 클래스의 인스턴스를 반환 ?

+1

그건 Laravel의 Facades가 작동하는 방식이 아닙니다. Facades는 정적 액세스를 통해 단일 인스턴스의 공용 메소드에 액세스 할 수있는 구문 설탕입니다. 기본 클래스 (또는 실제 Factory 클래스)에 공개 팩토리 메서드를 표시하거나, Dependency Injection을 사용하여 원하는 것을 얻을 수 있습니다. – maiorano84

답변

2

마찬가지로 @ maiorano84는 (는) Facades과 함께 사용할 수 없습니다.

/** 
* Resolve a new instance for the facade 
* 
* @return mixed 
*/ 
public static function refresh() 
{ 
    static::clearResolvedInstance(static::getFacadeAccessor()); 

    return static::getFacadeRoot(); 
} 

는 그런 다음 호출 할 수 있습니다 :

Custom 외관은 당신이 그것에 다음과 같은 방법을 추가 할 수있는 새로운 인스턴스를 반환하기 위해, 귀하의 질문에 대답하려면 분명히

Custom::refresh()->showValue(); 

을 (당신 원하는 경우 다른 번호로 refresh 번으로 전화 할 수 있습니다.

하나의 대안으로는 app() 글로벌을 사용하는 것입니다. 새 인스턴스를 해결하기 위해 Laravel과 함께 제공되는 함수 예 :

app('custom')->showValue(); 

희망이 있습니다.

+0

내 수업에서 URL을 다룬 이래로 Ross에게 감사드립니다. 항상 새로운 $ class = new static으로 시작하는 url() 메서드로 항상 동일한 작업을 수행했습니다. 그 다음부터 실행합니다. getFacadeRoot는 더 나은 대안처럼 보입니다. – kilrizzy

관련 문제