1

タイトルの通り、Router 内の DBAdapter にアクセスするのに苦労しています。ServiceLocatorAwareInterface の実装はあまり役に立ちません (ZF2 は何も注入しません)。カスタムファクトリを使用してモジュールでサービスとして宣言することもオプションではありません。これは、Http/Parts ルーターを拡張し、ルートに応じて渡される構成パラメーターを必要とするためです (ハードコーディングしたくありません)。

私がすでに試したこと:

module.config.php:

(...)
'router' => array(
    'routes' => array(
        'adm' => array(
            'type'    => 'Custom\Mvc\Router\Http\Segment',
            'options' => array(
                'route'    => '/admin[/:language[/:controller[/:action[/:params]]]]',
                'constraints' => array(
                    'language'  => '(pl|en)',
                    'controller' => "[a-zA-Z0-9_\-]*",
                    'action'     => "[a-zA-Z0-9_\-]*",
                    'params'        => "(.*)",
                ),
                'defaults' => array( ... ),
            ),
            'may_terminate' => true,
        ),
    ),
),
'service_manager' => array(
     (...)
    'invokables' => array(
        'Custom\Mvc\Router\Http\Segment' => 'Custom\Mvc\Router\Http\Segment',
    ),
),
(...)

現在のところ、Custom\Mvc\Router\Http\Segment は Zend\Mvc\Router\Http\Segment の単なるコピーであり、インターフェイス ServiceLocatorAwareInterface、AdapterAwareInterface およびそれぞれのメソッドが同様の方法で追加されています。

public function setServiceLocator(ServiceLocatorInterface $serviceLocator)
{
    var_dump($serviceLocator);
    exit();
}

setServiceLocator メソッドに入ることはなく、RouteInterface::factory() のみに入り、コンストラクターを呼び出します。

ファクトリをセットアップしても役に立ちませんでした。コードは実行されません。「invocables」またはファクトリをアプリケーション構成に移動した後の同じ動作。

現在 Zend Framework 2 RC1 を使用しています

4

1 に答える 1

3

あなたが私たちにsomコードを教えてくれたらもっと簡単だったでしょう.. :)

私の推奨事項は、ファクトリを使用してカスタム ルーターをインスタンス化するか、呼び出し可能なクラスとして設定することです (ルーターに設定できるように、ServiceLocatorAwareInterface を実装する必要があります)。

于 2012-08-02T09:00:16.970 に答える