2009-06-27 13 views
5

Zend Yönlendiricisi'ni kullanarak bir alt etki alanı oluşturmaya çalışıyorum ve alt alan adı altındaki her bölüm için, alt etki alanı.site.com/section/ gibi başka bir yol oluşturuyorum ve ardından alt etki alanı yoluna zincirleme yapmaya çalışıyorum. ama nasıl olduğunu bilmiyorum. Tüm belgeleri okuyabildiğim ve tüm forumları okudum, ama bunu kendi başıma bulmamı sağlıyor. Aşağıdaki kod ileYönlendirme INI dosyasında Zend Framework'de bir Alt etki alanı için Yönlendirme Zincirlerini nasıl yazarım?

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

: Her yerde net bir INI dosyası ile bu zincirleme nasıl bir örnek bulamıyorum

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 

Şimdiye kadar, benim girişimleri bana bu hatayı alabilirsiniz. Tüm uygulama, yönlendirme yapılandırması için bir INI'de yazılmıştır, bu yüzden, buradaki bir dizi tabanlı yapılandırmaya (veya bu konuyla ilgili XML'e) geçiş yapamıyorum. Bu, Internet'teki örneklerin% 100'ünün içinde.

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

kimse INI dosyasında yukarıdaki nasıl yapılacağına ilişkin herhangi bir fikir var mı: Ben dizi şeklinde bunu yapabilirdi

, ben sadece bu söyleyebiliriz?

cevap

11

İşte INI formatında, ne istediğinizi temelde:

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]+' 

Bu size aşağıdaki yolları verecektir: b2b-signup ve b2b-anotherroute.

Burada rota zincirleme bazı önemli notları var: Birlikte yolları zincirleme zaman

, dış rota parametreleri iç rotanın parametreleri daha yüksek önceliğe sahiptir. Böylece, dış ve iç güzergahta bir denetleyici tanımlarsanız, dış rotanın denetleyicisi seçilecektir.

Ebeveyn/çocuk zincir yol adları her zaman bir çizgi ile birleştirilir! Yani, yukarıdaki örnekte olduğu gibi, b2b.chains.signup, b2b-signup adlı bir yol haline gelir (URL düzeneği için kullanabilirsiniz, vb).

Zincirlemeye devam edebilirsiniz! Zincirlerin zincirlerinin zincirleri olabilir.

Zincirleme yollarının çocukları joker karakterlerle çalışmaz. Bakınız #ZF-6654. İşte bunun neden önemli olmadığını söyleyen blog post.

+0

Bu tam olarak aradığım cevaptır. ZF ile birkaç ay önce çalışmaya başladığımdan beri bana gerçekten yardımcı oldunuz ve internette tam olarak, INI'de bunun nasıl yapılacağını anlatan (sanırım bu yazıya kadar) hiçbir şey yoktur. Çok teşekkür ederim! ZF için iyi bir kitap önerebilir misin? – Dan

+1

Hayır, ne yazık ki. Zend Framework ile ilgili hiçbir kitap (ya da kitap?) Hiç okumadım. Bu, Rob Allen'ın http://www.zendframeworkinaction.com/ adresindeki Zend Çerçevesinin iyi olması gerektiğini söyledi. Ancak, ZF ile geliştirmenin hızlı olduğu hız nedeniyle, kitaplar hızla modası geçmiş oluyor; çok hızlı. Örneğin, rota zincirleri, Zend_Application veya Zend_Tool hakkında hiçbir şey bu kitapta yer almaz. – jason

+0

"Zincirleme yapabilirsin! Zincirlerin zincirleri zincirlere sahip olabilir." 1. routes.b2b.chains.anotherroute.chains.yetanotherroute ... 2. routes.anotherroute.chains.yetanotherroute ... –

İlgili konular