2013-03-18 4 views
2

사전 구성된 객체를 컨트롤러에 전달하는 좋은 방법을 찾고 싶습니다. 아래처럼 IoC를 사용할 수 있다는 것을 알고 있습니다 :laravel-4 컨트롤러에 구성이 필요한 객체를 삽입하는 방법

그러나 이것은 하나의 설정 만 사용할 수있는 한계가있는 것 같습니다. 차라리 다음과 같은 일을 할 것입니다 :

Route::get('some-route', function() 
{ 
    $config = Config::get('some.config'); 
    $object = new MyConfigObject($config); 
    Route::dispatch(MyController($object)); 
}); 

나는 이것이 내가 동일한 컨트롤러를 파견하고 싶다고하지만, 여러 경로에 대해 서로 다른 구성으로 할 싶은 이유.

답변

1

나는이 방법에 완전히 만족하지는 않지만 IoC의 자동 해상도를 사용하여 내가 지금까지 생각해 낸 최고가되었다./stat.php

/* 
* bindings to the IoC container 
*/ 
$app->singleton('MyNamespace\Transfer\TransferStategyInterface', function() { 
    $config = Config::get('transfer-strategy'); 
    return new LocalTransferStrategy($config); 
}); 


use MyNamespace\Transfer\TransferStategyInterface; 

TransferController.php

use MyNamespace\Transfer\TransferStategyInterface; 


class TransferController extends BaseController { 

    protected $transferStrategy; 

    public function __construct(TransferStategyInterface $transferStrategy = null) 
    { 
     $this->transferStrategy = $transferStrategy; 
    } 
} 
+0

는 내가 전에 당신의 접근 방식을 사용하는 데 사용

부트 스트랩. 이제'App :: make()'를 사용하여 메서드에서 직접 객체를 인스턴스화합니다. 이렇게하면 특정 메소드에서 필요하지 않은 객체를 만들 필요가 없으며 컨트롤러를 단순하게 유지할 수 있습니다. 다른 팁 : 나는 내 애플 리케이션 바인딩에 백 슬래 이스를 사용하지 않는다. 나는 그것을 자동 해상도로 보냈다. App :: make ('my.special.method', array ($ arg1, $ arg2))'와 같은 점들을 사용합니다. 이 방법은 설명 클래스가 포함 된 인스턴스 생성을 여러 개 가질 수 있습니다. –