【问题标题】:Setting up ServiceControllerServiceProvider in Silex with YAML使用 YAML 在 Silex 中设置 ServiceControllerServiceProvider
【发布时间】:2014-09-15 07:29:04
【问题描述】:

读取ServiceControllerServiceProviderhttp://silex.sensiolabs.org/doc/providers/service_controller.html

我希望通过服务位置进行 DI,以便我的控制器可以在构造函数而不是函数中注入依赖项。

但是我的应用程序使用 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 以引导所有内容。

根据我调用服务提供者的文档:

$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");

【问题讨论】:

  • 如何添加参数到:$app->get('/posts.json', "posts.controller:indexJsonAction");为了在 indexJsonAction 函数中处理?

标签: php symfony yaml silex


【解决方案1】:

我希望它可以像在 php 中声明的路由一样工作,服务提供者在从路由器解析控制器之前不会真正产生任何影响,所以你应该没问题

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

【讨论】:

  • 问题:我必须定义每个 $app['posts.controller'] = $app->share(function() use ($app) { return new PostController($app['posts.repository ']); });对于我拥有的每个 Controller 类以使其解析?
  • 是的,你确实做到了。您可以考虑使用循环和自动解析 deps 等来执行此操作,但这可能比它的价值更麻烦。
猜你喜欢
  • 2011-11-21
  • 1970-01-01
  • 2015-09-30
  • 2018-05-23
  • 2012-01-14
  • 1970-01-01
  • 2014-07-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多