2014-10-29 2 views
1

사용자 정의 클래스 App/Http/Responder이 있는데,이 메서드에는 응용 프로그램에서 특정 JSON 응답을 다시 빌드하는 몇 가지 메서드가 있습니다. 컨트롤러를 독립적으로 테스트하려고하므로 생성자를 통해 내 종속성을 주입하려고합니다.컨트롤러에서 IoC 바인딩을 찾을 수없는 Laravel

내 계획은 단순히 서비스 제공을 만들 수 있었다 $app에 결박 부착하고, 워드 프로세서에 따라, 그것은 자동으로 해결 될 수 있도록 :

public function register() 
{ 
    $this->app->bind('responder', function() 
    { 
     return new App\Http\Responder($this->app['cache'], $this->app['app'], new JsonResponse, $this->app['config']); 
    }); 
} 

그때 내 config/app.php이를 추가 할 수 있습니다.

이제는 내 Responder와 그 종속성이 응용 프로그램에 바인딩됩니다 (responder).

지금 나는 내 컨트롤러 생성자에 Responder를 주입 할 수있을 거라고 생각하고, Laravel 자동으로 IoC 컨테이너에서이 문제를 해결 할 수있을 것입니다 :
class AreasController extends BaseController { 

    protected $responder; 

    public function __construct(Responder $responder) 
    { 
     $this->responder = $responder; 
    } 

그러나 내가 Class Responser does not exist를 얻을. 나는 그것이 App::make() 외관을 사용하지 않고, 작업을 얻을 수 있습니다

있는 유일한 방법은, 내 컨트롤러에 응용 프로그램을 주입하는 것입니다 : 다음 $this->app['responder']->method()을 할 수

use Illuminate\Foundation\Application as App; 

class AreasController extends BaseController { 

    protected $app; 

    public function __construct(App $app) 
    { 
     $this->app = $app; 
    } 

.

분명히 나는 ​​뭔가를 놓치고 있지만, 테스트 할 수 있도록 앱에서 Facades를 사용하고 싶지 않습니다.

답변

4

당신은 IOC 컨테이너에서 해결 될 힌트 클래스를 입력 할 경우, 네임 스페이스와 실제 클래스 이름을 바인드해야합니다

$this->app->bind('App\Http\Responder', function() 
{ 
    return new App\Http\Responder($this->app['cache'], $this->app['app'], new JsonResponse, $this->app['config']); 
}); 

기술적으로는 구체적인 클래스이기 때문에 아직,이 클래스를 해결 할 용기 이 방법을 사용하면 다른 IOC 바인딩 리소스를 주입 할 수 있으므로 좋은 방법입니다. 그런 다음

,이 클래스는 당신을 위해 주입 한하고자 할 때, 형과 같이 클래스의 전체 경로를 암시 당신은 평소 :

use App\Http\Responder; 

class AreasController extends BaseController { 

    protected $responder; 

    public function __construct(Responder $responder) 
    { 
     $this->responder = $responder; 
    } 
} 
또한

에 대한 그것은 가치가 무엇인지, 당신의 오류 "Responder"의 철자가 "Responser"로 표시됩니다.

+0

고마워요. 이제'Responder' 클래스 생성자에서'__construct ($ cache, $ app, $ response, $ config)'를 실행해야합니다. 왜냐하면'Unresolvable dependency App \ Http \ Responder' 클래스의 [Parameter # 0 [ $ cache]] 해결 중 ... 혼란스러워! – Alias

+0

IoC 컨테이너가 바인딩을 사용하여 빌드하고 자동으로 구체적인 클래스를 작성하지 못하도록 서비스 공급자를 등록해야합니다. –

+0

아, 어리석은 나는 바인딩의 이름을 바 꾸었습니다! 시간을내어 주셔서 감사합니다! – Alias

관련 문제