使用YAML在Silex中设置ServiceControllerServiceProvider

时间:2014-07-23 22:10:41

标签: php symfony yaml silex

阅读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");

1 个答案:

答案 0 :(得分:1)

我希望它能像在php中声明的路由一样工作,服务提供商在从路由器解析控制器之前确实没有任何影响,所以你应该没问题

# $app::$rootPath . $app::DEFAULT_ROUTES_PATH
posts_json:
    path:      /posts.json
    defaults:  { _controller: posts.controller:indexJsonAction }