2016-06-28 14 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:PHPはlocalhostと-S:テストに8080 /ウェブ

パス:/メディア/ 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型を発見しましたコントローラからの接続方法は、私はこの行を置き換えて:

これらの1つ:

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