2014-10-30 7 views
2

클래스가 Awesome이고 ServiceProviderFacade을 사용하여 앱에 등록했습니다. 이제는 Awesome::Things()으로 사용할 수 있습니다.Facades 클래스의 Laravel 상수

내가이 클래스에 상수를 추가 할, 그래서

<?php namespace Helper\Awesome; 
class Awesome() 
{ 
    public static $MOVIE = 'I love the Lego Movie!"; 
} 

시도하지만 Awesome::$MOVIE를 호출 할 때, 내가 할 Access to undeclared static property: Helper\\Aesome\\Facades\\AwesomeFacade::$MOVIE

은 누군가가 도와 드릴까요?

+0

클래스를 인스턴스화 할 필요가 없습니다. 단지 'Helper \ Awesome \ Awesome :: $ MOVIE'을 사용하십시오. – Razor

답변

5

짧은 버전은 - 실제로 그렇게하고 싶지 않습니다. Laravel facades는 일반 클래스처럼 사용되는 것은 아닙니다. 응용 프로그램에서 이러한 방식을 사용하면 향후 개발자를 혼란스럽게 할 수 있습니다.

경고 중입니다. Laravel에서 "외관"을 만들면 실제로는 class alias이 생성됩니다. 다음은 당신이 글로벌 비 네임 스페이스 클래스 Awesome를 사용할 때마다 의미

class_alias('Helper\Aesome\Facades\AwesomeFacade','Awesome'); 

를 실행처럼 당신은 몇 가지 포인트 코드에서, app/config/app.phpalias 목록에 Awesome을 추가 할 때, PHP는 Helper\Aesome\Facades\AwesomeFacade를 대체합니다. 상수를 추가하려면이 클래스에 상수를 추가해야합니다.

Laravel이 기본 Facade 클래스로 인해 메소드를 통과 할 수 있으므로 실제 서비스 구현 객체에 대한 호출을 전달하는 __callStatic 메서드를 구현합니다. Facades는 정적 상수 액세스를 전달하지 않습니다. 또한 PHP는 상수에 대한 요청을 전달하는 비슷한 마법 방법을 가지고 있지는 않습니다.

이 답변의 심층적 인 버전에 대해 궁금한 점이 있으시면, 현재 에 대한 심층 정보를 포함하여 a series on Laravel's object system을 작성 중입니다.

+0

답변 해 주셔서 감사합니다. 'User'와 같은 클래스 모델 자체가 Facade가 아닌가? 아니면 혼란 스럽습니까? 내가하고 싶은 일은 UserHelper라고 부르 자. UserHelper라고 부르 자. 그런 다음 내 모든 애플 로직을 거기서한다. 예를 들어, UserHelper :: register (...)'그것이 지금까지 정면을 사용하고있는 방법입니다. – Kousha

+0

@Kousha 나는 열거 된 기사 시리즈를 읽었고 질문이 있으면 다시 돌아 왔습니다. 모든 외관은 뭔가에서 바로 가기를 제공하기위한 것입니다. 'someService :: someMethod'와 같은 형태로 make ('someserver ') -> someMethod()를 만들고, 두 번째 구문은 laravel에서 facade라고 부릅니다. ** Eloquent 모델에서도 정적 구문을 사용하기는하지만 –

+0

현재 기사를 읽는 중입니다. 고마워요. 단 한 가지 빠른 작업 : 컨트롤러 논리를 돕기 위해 도우미 함수를 만들면 어떻게해야합니까? 그걸로 정적 구문의 우아한 방법을 어떻게 사용할 수 있습니까? – Kousha