2011-12-08 3 views
2

Silex으로 응용 프로그램을 만들고 있는데 어쨌든 Silex\Application의 인스턴스를 메서드 매개 변수에서 method_name(Application $application) 할 수없는 곳에 가져올 수 있는지 궁금합니다.Silex Application 인스턴스를 얻으십시오

예를 들어 컨트롤러에 작업이 아닌 개인 메서드가 있다고 가정 해보십시오. 매개 변수로 Application $application을 입력하면 전달해야한다는 오류가 발생합니다.

필자는 수동으로 해당 메소드를 전달하지 않아도됩니다.

답변

4

정말로 두 가지 방법 만 있습니다.

a) 클래스의 생성자에 인수로 Silex\Application을 전달하고이를 인스턴스 변수로 지정하십시오.

b) 직접 Silex\Application을 개인 메소드에 인수로 전달하십시오.

클래스에 전체 앱이 필요합니까? 의존성 주입의 포인트 대신 컨테이너를 주입의 직접 종속성을 주입하는 것입니다 (예, Silex\Application는 의존성 삽입 컨테이너입니다 \Pimple을 확장합니다. 다른 대답에 귀하의 코멘트의 렉스에서지고의 목표에서

+0

음, 아니요, $ app [ 'twig']에 변수를 저장하려고합니다. 어떻게해야합니까? 나는 개체가 DI를 통해 메서드에 전달되어야한다는 것을 Pimple이 어떻게 알았는지, 아니면 정상적으로 전달되어야하는 일반 매개 변수인지를 정확히 알지 못합니다. – ryanzec

+1

매개 변수를 메서드 호출에 자동으로 전달할 수 없습니다. 그러나 컨트롤러 클래스를 서비스로 정의하고 해당 클래스의 생성자에 나뭇 가지를 삽입 할 수 있습니다. – igorw

+0

나는 이것을 시도했다 : http://pastebin.com/LpuC0cYn : 그러나 그것은 작동하지 않는다. – ryanzec

2

/. 응용 프로그램이 나뭇 가지 서비스에서 얻을 수 있습니다 내 렉스 프로젝트의 또 다른 기능에서 현재 응용 프로그램에서 점점 해결 한 방법은 다음과 같습니다

use \Silex\Application; 
use \Symfony\Component\HttpFoundation\Request; 

class myController { 
    private $a; 

    // Route defined as: 
    // $app->get('/foo', 'myController::showPage'); 
    public function showPage(Application $a) { 
    $this->a = $a; 
    return $this->doAwesome(); 
    } 

    private function doAwesome() { 
    $twig = $this->a['twig']; 
    return $twig->render('awesomePage.twig'); 
    } 
} 

다음 절약 할 경로에 대한 엔드 포인트의 모든 기능 응용 프로그램이 클래스 속성으로 전달되어 다른 기능을 사용할 수 있습니다. 즉, 모든 기능에서 $this->a = $a;을 기억해야한다는 의미입니다. t는 doAwesome() (전에으로 전화합니다. doAwesome())을 사용합니다.하지만 그 문제를 해결하는 가장 좋은 방법입니다.

관련 문제