silex控制器setter注入

时间:2016-06-28 19:37:00

标签: dependency-injection silex

我是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调用的,也是从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);

有关如何将服务注入控制器的任何建议吗?

1 个答案:

答案 0 :(得分:0)

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

__set($propertyName, $propertyValue) {}

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

public function setService($service) {}

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

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

这些:

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