silex 控制器 setter 注入

silex controller setter injection

我是 PHP/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(此文件是从 config.php 文件中调用的,该文件也是从 app.php 中调用的,而 app.php 也是从 index.php 中调用的文件):

function getMediaController($app) {
    $mediaController = new \Controllers\Instagram\MediaController();
    $mediaController->setService(new \Service\InstagramServiceManager());        
    return $mediaController;
}
$app->mount('/media', getMediaController($app));

启动php内置服务器:php -S localhost:8080 /web

测试路径:/media/id=1

错误:PHP 致命错误:在第 41 行 /home/fernando/projects/php/silex/api_media_location_v2/src/controllers/instagram/MediaController.php 的非对象上调用成员函数 getMediaService()

来自 MediaController.php 的第 41 行:

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

关于如何将服务注入控制器有什么建议吗?

已解决:问题似乎出在控制器的魔术方法上:

__set($propertyName, $propertyValue) {}

我刚刚为服务创建了自定义 setter:

public function setService($service) {}

此外,我在控制器的连接方法中发现了一个问题,我已经替换了这一行:

$controllers->get('/test', 'Controllers\Instagram\MediaController::test');

对于这些:

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