我正在使用 Silex 框架。 我写了一个简单的路由资源加载器,使用这种方式:
$app->register( new RouteCollectionLoaderProvider);
$app["mp.route_loader"]->append(array(
array(
"type"=>"yaml",
"path"=>__DIR__."/Resources/routes/routes.yml",
"prefix"=>"/",
)
));
我能够加载以常规方式命名的路由,例如,在yaml文件中
index:
pattern: /
defaults: {_controller: Controller\DefaultController::index }
但是我无法加载定义为服务的控制器:
$app["my.controller"] = function(){ return new MyController;};
info:
pattern: /info
defaults: {_controller: my.controller:info }
能够将控制器用作资源文件中的服务语法需要什么?
感谢
答案 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');
这也适用于您的自定义加载程序。