2014-09-11 5 views
2

Facade 클래스를 작동 시키려고하는데, Laravel이 내 루트 클래스에서 호출하는 대신 Facade 클래스에서 메서드를 호출하는 것 같습니다. 그래서 메서드 undifined 오류가 발생합니다. 바인딩 (App :: make ('feed') -> addArticle();)에서 직접 피드 클래스를 만들면 제대로 작동합니다. 그래서 나는 내 Facade와 함께 wrogn을 가지고 있다고 생각합니다. 어떤 아이디어? 미리 감사드립니다.Laravel Facade 클래스가 대신 루트 클래스를로드하지 않음 메서드를 반환합니다.

컨트롤러

class RssController extends BaseController 
{ 

    public function getArticles() { 
     Feed::addArticle(); 
    } 
} 

ServiceProvider

use Illuminate\Support\ServiceProvider; 



class FeedServiceProvider extends ServiceProvider {  
    public function register() 
    { 
     $this->app->bind('feed', function() 
     { 
      return new Feed; 
     }); 
    } 
} 

외관 클래스

use Illuminate\Support\Facades\Facade; 

class FeedFacade extends Facade { 

protected static function getFacadeAccessor() 
{ 
    return 'feed'; 
} 

} 

루트 클래스

class Feed { 

//vars 


    public function __construct() 
    { 

    } 

    public function make() { 
     return new Feed(); 
    } 

    public function addArticle() { 
     return '@addArticle'; 

    } 

답변

3

문제는 Laravel Facade (Feed::)와 서비스 제공 업체 (class Feed)의 구현 클래스가 동일한 이름을 갖기를 원하는 것 같습니다. app/config/app.php에 별칭 섹션

'aliases' => array(
    'App'    => 'Illuminate\Support\Facades\App', 
    'Artisan'   => 'Illuminate\Support\Facades\Artisan', 
    'Auth'   => 'Illuminate\Support\Facades\Auth', 
    'Blade'   => 'Illuminate\Support\Facades\Blade', 

이 때문에 외관은

`App::someMethod` 

Laravel 실제로 Illuminate\Support\Facades\AppgetFacadeAccessor 호출 App 외관에게, 당신이 말하는, 사용할 때마다이 앨리어싱 의미 작동합니다. 시스템에 전체 클래스 App이 없습니다. 그것이 있다면 외관과 비슷한 문제를 일으킬 것입니다. ...

<?php 
namespace My\Namespace; 
class Feed 
{ 
} 

시스템에 Feed =>Illuminate\Support\Facades\Facade\FeedFacade의 별칭 가져 오기를 (적절한 위치에 파일을 이동) 글로벌 네임 스페이스에서 구현 클래스 Feed를 얻을 수

return new \My\Namespace\Feed; 

그리고 모두 설정해야합니다.

또한 혼란 스러울 위험이 있으므로 Illuminate\Etc\... 네임 스페이스에 자신 만의 클래스를 추가 할 필요가 없으며 핵심 Laravel 팀이 받아 들여지려고하지 않는 한 자신의 클래스를 직접 배치해야합니다 수업을 공식 피드 서비스로 사용하십시오.