2009-06-27 11 views
5

私はZend Routerを使用してサブドメインを作成しようとしていますが、サブドメインの下の各セクション(subdomain.site.com/section/など)に対して別のルートを作成してからサブドメインルートにチェーンしようとしています。しかし、私はどのように知りません。私は見つけることができるすべてのドキュメンテーションとすべてのフォーラムを読んだが、それは私自身でそれを理解することにつながる。次のコードでZend FrameworkのサブドメインのルーティングチェーンをルーティングINIファイルに書き込むにはどうすればよいですか?

Catchable fatal error: Argument 2 passed to Zend_Controller_Router_Rewrite::addRoute() must implement interface Zend_Controller_Router_Route_Interface, null given, called in /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 155 and defined in /var/local/zend/library/Zend/Controller/Router/Rewrite.php on line 93

::私はどこでもネット上のINIファイルでこれをチェーン行う方法の例を見つけることができません

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%が入っている配列ベースの設定(またはその点で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ファイルに上記を行う方法上の任意のアイデアを持っていますか?

答えて

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を。ここで

は、ルートチェーン上のいくつかの重要な注意事項です:

ルートを一緒にチェーンするとき、外側のルートのパラメータは内側のルートのパラメータより高い優先度を持っています。したがって、外側と内側のルートにコントローラを定義すると、外側のルートのコントローラが選択されます。

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

連鎖することができます!鎖の鎖は鎖を有することができる。

チェーンルートの子供はワイルドカードでは動作しません。 #ZF-6654を参照してください。ここにはなぜそれが大きな問題ではないかもしれないのかについて語るblog postがあります。

+0

これはまさに私が探していた答えです。数ヶ月前にZFと仕事を始めてから、あなたは本当に私を助けてくれました。文字通り、INIでこれを行う方法を記述したインターネット上には何も見つかりませんでした。どうもありがとうございました! ZFの良い本をお勧めしますか? – Dan

+1

いいえ、悲しいことです。私は、Zend Frameworkについての本(または本?)を一度も読んだことはありません。つまり、Rob AllenのZend Framework in Action http://www.zendframeworkinaction.com/は良いとされています。しかし、ZFでの開発が急速に進んでいるため、書籍は古くなってしまいます。とても早い。たとえば、ルートチェーン、Zend_Application、Zend_Toolについては、その本にはありません。 – jason

+0

"連鎖し続けることができます!連鎖は連鎖を持つことができます。" 1. routes.b2b.chains.anotherroute.chains.yetanotherroute ... 2. routes.anotherroute.chains.yetanotherroute ... –

関連する問題