どのように私は、ルーティングINIファイル内のZend Frameworkのサブドメインのルーティングチェーンを書くのですか?

StackOverflow https://stackoverflow.com/questions/1052614

質問

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

  

キャッチできる致命的なエラー:引数に渡された2   Zend_Controller_Router_Rewriteの:: addRoute()インタフェースを実装する必要があります   Zend_Controller_Router_Route_Interfaceは、ヌルで呼ばれ、与えられました   ライン155上の/var/local/zend/library/Zend/Controller/Router/Rewrite.php   とで定義されています   ライン93上の/var/local/zend/library/Zend/Controller/Router/Rewrite.php

次のコードでます:

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ファイルでこれをチェーン行う方法の例を見つけることができません。アプリケーション全体は、インターネット上の例の100%にされた、ルーティングの設定のためにINIに書き込まれているので、私は、アレイベースの設定(またはそのことについて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ファイルに上記を行う方法上の任意のアイデアを持っていますか?

役に立ちましたか?

解決

ここでは、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

ここで、経路連鎖の上にいくつかの重要な注意事項を示します。

ルートを一緒にチェーン場合、

、外側のルートのパラメータは内側のルートのパラメータより高い優先度を有しています。あなたは、外側および内側のルートでコントローラを定義する場合したがって、外経路の制御が選択される。

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

あなたはチェーンを維持することができます!チェーンのチェーンは、チェーンを持つことができます。

チェインルートの子供たちは、ワイルドカードでは動作しません。 #ZF-6654 を参照してください。ここではそののブログ記事ですそれは大したことないかもしれない理由について話し合います。

scroll top