0

SilexFrameworkを使用しています。私はそのように使用される単純なルートリソースローダーを書きました:

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

コントローラをリソースファイルのサービス構文として使用できるようになるには、何が必要ですか?

ありがとう

4

1 に答える 1

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

これは、カスタムローダーでも機能するはずです。

于 2013-03-03T16:21:41.427 に答える