阅读ServiceControllerServiceProvider http://silex.sensiolabs.org/doc/providers/service_controller.html
我希望DI over Service Location,以便我的控制器可以在构造函数中注入依赖项而不是函数。
但是,我的应用程序使用YAML进行路由,而不是像示例那样使用PHP。
这是我的路线:
protected function registerRouteService()
{
$app = $this;
$this['routes'] = $this->extend(
'routes',
function (RouteCollection $routes) use ($app) {
$loader = new YamlRouting(new FileLocator($app::$rootPath . $app::DEFAULT_ROUTES_PATH));
$collection = $loader->load($app::DEFAULT_ROUTES_FILE);
$routes->addCollection($collection);
return $routes;
}
);
}
此功能受到保护,因为我正在扩展Silex \ Application以引导所有内容。
根据我调用serviceprovider的文档:
$app->register(new Silex\Provider\ServiceControllerServiceProvider());
我的问题是,因为我使用YAML文档的以下部分 - 我不知道如何应用它一般,因为
$app['posts.controller'] = $app->share(function() use ($app) {
return new PostController($app['posts.repository']);
});
$app->get('/posts.json', "posts.controller:indexJsonAction");
答案 0 :(得分:1)
我希望它能像在php中声明的路由一样工作,服务提供商在从路由器解析控制器之前确实没有任何影响,所以你应该没问题
# $app::$rootPath . $app::DEFAULT_ROUTES_PATH
posts_json:
path: /posts.json
defaults: { _controller: posts.controller:indexJsonAction }