我是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);
有关如何将服务注入控制器的任何建议吗?
答案 0 :(得分:0)
解决:问题似乎出现在控制器的魔术方法中:
__set($propertyName, $propertyValue) {}
我刚刚为服务创建了一个自定义setter:
public function setService($service) {}
另外,我在控制器的连接方法中发现了一个问题,我已经替换了这一行:
$controllers->get('/test', 'Controllers\Instagram\MediaController::test');
这些:
$controllers->get('/test', $this->test());