2016-06-28 3 views
0

PHP/silex를 처음 사용했습니다.silex 컨트롤러 설정 주입

문제점 : 컨트롤러에 종속성을 삽입 할 수 없습니다.

컨트롤러 :

class MediaController implements ControllerProviderInterface 
{ 
    private $serviceManager; 

    public function setService($service) 
    { 
     $this->serviceManager = $service; 
    } 

    public function getMedia($id) 
    { 
     $this->serviceManager->getMediaService()->getMedia($id); 
    } 

    public function connect(Application $app) 
    { 
     $controllers = $app['controllers_factory']; 
     $controllers->get('/id={id}', 'Controllers\Instagram\MediaController::getMedia'); 
     $controllers->get('/test', 'Controllers\Instagram\MediaController::test'); 
     return $controllers; 
    } 
} 

사출 구성 routes.php 파일 (이 파일도의 index.php에서 호출도 app.php에서 호출되는 config.php 파일로부터 호출)

function getMediaController($app) { 
    $mediaController = new \Controllers\Instagram\MediaController(); 
    $mediaController->setService(new \Service\InstagramServiceManager());   
    return $mediaController; 
} 
$app->mount('/media', getMediaController($app)); 
서버에 내장 된 PHP를 시작

: 시험 8080/웹

경로 : PHP는 로컬 호스트를 -S/미디어/ID = 1

,

오류 : PHP 치명적인 오류 : 라인 /home/fernando/projects/php/silex/api_media_location_v2/src/controllers/instagram/MediaController.php의 비 객체의 멤버 함수 getMediaService()를 호출 (41)

MediaController.php에서

라인 41 :

$this->serviceManager->getMediaService()->getMedia($id); 

제어기로 서비스를 주입하는 방법에 대한 제안?

+0

http://silex.sensiolabs.org/doc/master/services.html을 읽으셨습니까? – fucethebads

+0

예, 나는 또한 이것을 시도했습니다 : '$ mediaController-> setService ($ app ['instagram_service_manager ']);' 그러나 결과는 같다. –

답변

0

가 해결 : 난 그냥 서비스에 대한 사용자 정의 세터 생성

__set($propertyName, $propertyValue) {} 

: 문제가 컨트롤러의 마술 방법 것 같다 또한

public function setService($service) {} 

을, 나는 문제 INT 발견 컨트롤러에서 connect 메서드를 사용하여이 줄을 바꿨습니다.

:

$controllers->get('/test', $this->test());