5

Zend ルーターを使用してサブドメインを作成しようとしています。次に、subdomain.site.com/section/ などのサブドメインの下のセクションごとに別のルートを作成し、それをサブドメイン ルートにチェーンしようとしています。しかし、方法がわかりません。見つけたすべてのドキュメントとすべてのフォーラムを読みましたが、自分でそれを理解するようになりました。これまでのところ、私の試みはこのエラーを取得するだけです:

キャッチ可能な致命的なエラー: Zend_Controller_Router_Rewrite::addRoute() に渡される引数 2 は、インターフェイス Zend_Controller_Router_Route_Interface を実装する必要があります。null が指定され、/var/local/zend/library/Zend/Controller/Router/Rewrite.php の 155 行で呼び出され、/var で定義されます。 /local/zend/library/Zend/Controller/Router/Rewrite.php 行 93

次のコードを使用します。

routes.b2b.type = "Zend_Controller_Router_Route_Hostname"
routes.b2b.route = "sales.sitename.com"
routes.b2b.defaults.module = b2b
routes.b2b.defaults.controller = index
routes.b2b.defaults.action = index

routes.b2b_signup.type = "Zend_Controller_Router_Route_Static"
routes.b2b_signup.route = "/signup"
routes.b2b_signup.defaults.controller = "index"
routes.b2b_signup.defaults.action   = "signup"

routes.b2b_login.type = "Zend_Controller_Router_Route_Chain"
routes.b2b_login.chain = b2b_signup

これを INI ファイルで連鎖させる方法の例は、ネット上のどこにも見つかりません。アプリケーション全体がルーティング構成の INI で記述されているため、インターネット上の例の 100% が含まれている配列ベースの構成 (または XML) に切り替えることはできません。

配列形式でそれを行うことができれば、次のように言えます。

$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
    'sales.sitename.com',
    array(
        'controller' => 'index',
        'module'     => 'b2b',
        'action'     => 'index'
    )
);

$hostnameRoute = new Zend_Controller_Router_Route_Static(
    '/signup',
    array(
        'controller' => 'index',
        'module'     => 'b2b',
        'action'     => 'signup'
    )
);
    $chainedRoute = new Zend_Controller_Router_Route_Chain();
    $chainedRoute->chain($b2b_signup)

INIファイルで上記を行う方法について誰かアイデアがありますか?

4

1 に答える 1

11

基本的に、INI形式で必要なものは次のとおりです。

routes.b2b.type = "Zend_Controller_Router_Route_Hostname"
routes.b2b.route = "sales.sitename.com"
; you could specify a default module (or anything) to use for the whole 
; route chain here, like so: 
; routes.b2b.defaults.module = "default"

routes.b2b.chains.signup.type = "Zend_Controller_Router_Route_Static"
routes.b2b.chains.signup.route = "/signup"
routes.b2b.chains.signup.defaults.controller = "index"
routes.b2b.chains.signup.defaults.action = "signup"

routes.b2b.chains.anotherroute.route = "/something/:foo" ; etc, etc.
routes.b2b.chains.anotherroute.defaults.action = "foo"
routes.b2b.chains.anotherroute.defaults.controller = "index"
routes.b2b.chains.anotherroute.defaults.foo = "bar"
routes.b2b.chains.anotherroute.reqs.foo = '[a-z]+'

これにより、次のルートが得られます: b2b-signup、およびb2b-anotherroute

ルート チェーンに関する重要な注意事項を次に示します。

ルートを連鎖させる場合、外側のルートのパラメーターは内側のルートのパラメーターよりも優先度が高くなります。したがって、外側ルートと内側ルートでコントローラーを定義すると、外側ルートのコントローラーが選択されます。

親/子の連鎖ルート名は常にダッシュで連結されます! したがって、上記の例のように、(URL アセンブリなどに使用できる)b2b.chains.signupという名前のルートになります。b2b-signup

あなたは連鎖し続けることができます!チェーンのチェーンはチェーンを持つことができます。

連鎖ルートの子は、ワイルドカードを使用できません。#ZF-6654を参照してください。これが大したことではない理由について説明しているブログ投稿です。

于 2009-06-27T14:38:05.423 に答える