2013-03-03 19 views
0

我正在使用Silex Framework。 我寫了使用這樣一個簡單的路徑資源加載器:如何在yaml資源文件中使用控制器作爲服務

$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 } 

將資源文件中的控制器用作服務語法需要什麼?

感謝

回答

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'); 

這應該與您的自定義裝載機一起工作。

相關問題