2016-06-23 1 views
0

모든 컨트롤러에 사용할 클래스를 포함하고 싶습니다. 여기에 내가 행운으로 시도한 것이있다. 어떻게 laravel에 글로벌 클래스를 포함합니까

use App\Lib\RequestType; 

그럼 내 컨트롤러 UserController.php에, 내가 테스트 함수를 호출하십시오 Controller.php 파일에서

, 나는이 코드 줄을 추가했습니다.

dd(RequestType::test()); 

그러나 치명적인 오류가 발생합니다.

클래스 '앱 \ HTTP를 \ 컨트롤러는 \ RequestType'laravel는 컨트롤러 폴더에 클래스를 찾고 무엇

를 찾을 수 없습니다. UserController가 Controller 클래스를 상속해야하지 않습니까? 사전

+1

'use's가 상속되지 않습니다. – tkausl

+0

그들을 포함시킬 방법이 있습니까? – Beardslapper

+0

아니요, 해당 파일에있는 로컬 파일입니다. – tkausl

답변

0

정적 클래스를 작성하고 use하여 전화를 시도하는 경우에

덕분에, 다음 하나의 옵션은 임의의 장소에서 사용되는 클래스를 가능하게 할 것이다 작곡가의 자동로드 기능을 활용하는 것입니다.

use RequestType; 

어떤 컨트롤러에서 다음

"autoload": { 
     "psr-4": { 
      "App\\": "app/" 
     }, 
     "classmap": [ 
      "app/Lib" 
     ] 
    }, 

dd(RequestType::test()); 

참고 :

public static function test() 
+0

하지만 모든 컨트롤러에이 파일을 포함해야합니다. 컨트롤러가 50 대 있다고 가정 할 때 모든 컨트롤러에 컨트롤러를 포함해야합니다. Controller 클래스가이 작업을 수행 할 수 없다는 사실을 엿듣니다. – Beardslapper

+0

모든 컨트롤러에이 기능을 포함시키지 않겠습니까? –

+0

각 컨트롤러 메소드가 API 요청을 할 때마다 모든 컨트롤러에이를 포함시켜야합니다. 내가 피하고 싶은 것은 각 컨트롤러에 "use RequestType"을 써야한다는 것이다. 또한, 위에서 언급 한 시도하고 그것은 RequestType 클래스가 존재하지 않는다고 말했다. 왜 그런가? – Beardslapper

0

자동 마술이 할 방법이없는 것처럼 기능 테스트해야 모든 곳의 수업.

PHP use은 확장 클래스에 상속되지 않습니다. 심지어 Laravel의 Facades도 지정해야합니다.

더 쉽게 관리 할 수 ​​있도록 클래스를 App\Http\Controllers\Controller->__contruct()에 저장할 수 있습니다.

// App\Http\Controllers\Controller 
public function __construct() 
{ 
    $this->requestType = new RequestType(); 
} 

// App\Http\Controllers\FooController 
public function __construct() 
{ 
    parent::__contruct(); 
} 

public function index() 
{ 
    $requestType = $this->requestType; 
} 
+0

@RyanVincent 올바르게로드되고 네임 스페이스 클래스는 'use'또는 직접 호출 (예 :'new App \ SomeClass ')을 통해 액세스 할 수 있지만 컨트롤러 클래스에는 주입되지 않습니다. 이는 서비스 컨테이너의 구성 방법을 수정해야만 달성 할 수 있습니다. – Qevo