Modülleri olmadan Zend Framework derin yolları - nasıl?

2 Cevap php

Ben REST hizmet için bazı yolları yazıyorum. Benim kaynağın URI biri bu gibi görünüyor

kaynaklar / user /: id

Ben de böyle bakmak hangi bir kullanıcının bireysel özellikleriyle erişim vermek istiyorum

kaynaklar / user /: id/:attribute

Ben ikinci yolu tanımlamak çalıştığınızda Ama çalışmıyor. İşte yolları tanımlanır benim ini bulunuyor

routes.user.route = "kaynaklar / user /: id"
routes.user.defaults.controller = user
routes.user.defaults.action = get
routes.user.defaults.id = 0
routes.user.reqs.id = "\d+"

routes.user_attribute.route = "kaynaklar / user /: id/:attribute/"
routes.user_attribute.defaults.controller = user
routes.user_attribute.defaults.action = getAttribute
routes.user_attribute.defaults.id = 0
routes.user_attribute.defaults.attribute = ""
routes.user_attribute.reqs.id = "\d+"
routes.user_attribute.reqs.id = "reviews|lists"

Benim tarayıcıda resources/user/4/reviews erişmeye çalıştığınızda, aşağıdaki çıktıyı almak

An error occurred
Page not found
Exception information:

Message: Invalid controller specified (resources)
Stack trace:

#0 /usr/local/lib/ZendFramework/ZendFramework-1.7.1-minimal/library/Zend/Controller/Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /home/baileyp/public_html/web/index.php(50): Zend_Controller_Front->dispatch()
#2 {main}

Request Parameters:

array(4) {
  ["controller"]=>
  string(9) "resources"
  ["action"]=>
  string(4) "user"
  [10]=>
  string(7) "reviews"
  ["module"]=>
  string(7) "default"
}

Yani, açıkça şeyler beri denetleyicisi "kaynaklar" ve eylem "kullanıcı" olduğunu, doğru benim 2 rota işleme değil. Ben burada yanlış ne yapıyorum? Ben bunu uygulamak için nasıl göstermek bulduk Zend sitede hiçbir örnek yoktur.

Sadece bir URI bir yönlendirme sisteminin tüm amacı maç için klasörler oluşturulması ve bu kaçınarak - Ve ben sadece bu halletmek için modülleri kullanmak istemiyorum.

2 Cevap

Eğer yan bu iki tarafını oluşturan eğer emin değilim. Benim durumumda, eşlemek için çalışıyorsanız ilk güzergah aslında ikinci tarafından (Eğer attribute için sağlanan varsayılan değer) sayesinde sadece iyi ele olurdu.

Böylece, bu yol:

foo.com/resources/user/:id/:attribute

Bu çağrı ile:

foo.com/resources/user/12345/

Varsayılan nitelik değeri zannedebilir:

foo.com/resources/user/12345//

Boş değer web sunucusu (apache davranır birden tek bir eğik çizgi olarak eğik) tarafından kaldırılmış olabilir gibi, ben isimle olabilir şey niteliğini varsaymak tavsiye ederim ve bir bir index.html dosyasına benzer işlev görür Klasör:

foo.com/resources/user/12345/
foo.com/resources/user/12345/general/ (same result)

Ben giderme bir sıra yol varsayılan değerleri ve gereksinimleri line-by-line out yorum olduğunu yaşadım iyi şanslar. (Bunu az bilgi vermek gibi varsayılan geri düşecek gibi) rota kendisi 'kenar' görerek sonunda.

Ayrıca, örneğin, sen iki kez id gereksinimlerini tanımlarken unutmayın:

 routes.user_attribute.reqs.id = "\d+"
 routes.user_attribute.reqs.id = "reviews|lists"

Ayarlanabilir olur:

 routes.user_attribute.reqs.id = "\d+"
 routes.user_attribute.reqs.attribute = "reviews|lists"

Yanı sıra sonuçlar üzerinde bir etkisi olabilir. Umarım bu yardımcı olur.

Ben ... sadece kuralların sıralamasını değiştirmeniz gerektiğini düşünüyorum böylece ilk üstüne daha spesifik kurallar koymak ve altta daha genel!

routes.user_attribute.route = "resources/user/:id/:attribute/"
routes.user_attribute.defaults.controller = user 
routes.user_attribute.defaults.action = getAttribute
routes.user_attribute.defaults.id = 0
routes.user_attribute.defaults.attribute = ""
routes.user_attribute.reqs.id = "\d+"
routes.user_attribute.reqs.id = "reviews|lists"

routes.user.route = "resources/user/:id"
routes.user.defaults.controller = user
routes.user.defaults.action = get
routes.user.defaults.id = 0
routes.user.reqs.id = "\d+"

Ben benzer bir sorun vardı ve o benim sorunum sabit!