如何在yaml资源文件中将控制器用作服务

时间:2013-03-03 02:05:19

标签: php yaml silex symfony-components

我正在使用 Silex 框架。 我写了一个简单的路由资源加载器,使用这种方式:

    $app->register( new RouteCollectionLoaderProvider);
    $app["mp.route_loader"]->append(array(
            array(
                    "type"=>"yaml",
                    "path"=>__DIR__."/Resources/routes/routes.yml",
                    "prefix"=>"/",
                )
    ));

源代码在这里:https://github.com/Mparaiso/silex-extensions/blob/master/src/Mparaiso/Provider/RouteCollectionLoaderProvider.php

我能够加载以常规方式命名的路由,例如,在yaml文件中

index:
  pattern: /
  defaults: {_controller: Controller\DefaultController::index }

但是我无法加载定义为服务的控制器:

$app["my.controller"] = function(){ return new MyController;};

info:
  pattern: /info
  defaults: {_controller: my.controller:info }

能够将控制器用作资源文件中的服务语法需要什么?

感谢

1 个答案:

答案 0 :(得分:2)

Silex附带ServiceControllerServiceProvider,您可以使用它来获取控制器作为服务。

$app->register(new Silex\Provider\ServiceControllerServiceProvider());

$app['my.controller'] = $app->share(function ($app) {
    return new MyController($app['my.service']);
});

$app->get('/info', 'my.controller:info');

这也适用于您的自定义加载程序。