Nasıl Zend Framework parametrelerin tek numaralarını almak için?

6 Cevap php

Herkese selamlar

request nesnesini kullanarak, bu tanım olarak bir tek değer alınamıyor:

http://mydomain.com/controller/action/value1

$request->getParams() value1 dönen değil kullanma.

Çıktı:

array([controller] => 'controller', [action] => 'action')

Anahtar eksik olduğu.

Sorun kendisi oldukça basit ve ben URI kendimi ayrıştırmak, ama aslında ben ZF (değil mi?) Yapmak istiyorum. Ben google kullanarak bir ipucu bulmak veya SO olamazdı.

Nasıl bir değeri olmayan bir anahtarı almak mümkün duyuyorum?

6 Cevap

Varsayılan için, Zend Framework URL parametreleri /key/value şeklinde olmasını bekler. Bu deneyin:

http://mydomain.com/controller/action/key1/value1

print_r($request->getParams());

Sonuç:

Array
(
    [controller] => controller
    [action] => action
    [key1] => value1
)

Düzenleme: Diğerleri de söylediğim gibi, sizinle sopa istiyorsanız http://mydomain.com/controller/action/value1 Eğer Zend_Controller_Router bir göz atmalısınız.

Gerekli alan ekleyerek yolları değiştirerek deneyin.

Peki nedir bu rota için haritaya benziyor? Onun varsayılan rota eğer ayrıştırma kural key/value dayanır çünkü o bu beklenmelidir.

Bu basit kuralı uygulayın yoksa o zaman o URI için kuralı maç için yeni bir rota oluşturmanız gerekir.

Eğer düşünüyorsanız genel olarak size rota bu değer için varsayılan tedarik gereken bir değere sahip olmayacak bir anahtar var.

Varsayılan olarak, raylar stil URL ayrıştırma kullanılır. Yani amaçlar için isteyeyim:

http://mydomain.com/controller/action/key1/value1

Eğer anahtarı1 kısmını kullanmak zorunda olmazdı böylece olsa yönlendirici yapılandırabilirsiniz. Docs bakınız:

http://framework.zend.com/manual/en/zend.controller.router.html

Aşağıdaki gibi (değer1 bir ondalık değer ise sizin ihtiyaçlarınıza uygun düzenli ifadeyi değiştirmek değilse,) routes.ini dosyasında rotanızı tanımlayın:

routes.your_route.route = "controller/action/:value1"
routes.your_route.defaults.controller = "controller"
routes.your_route.defaults.action = "action"
routes.your_route.reqs.value1 = "\d+"

Sonra GetParam (ler) kullanarak eylem değere erişebilirsiniz.

http://mydomain.com/controller/action/param/value1/

array([controller] => 'controller', [action] => 'action', [param] => 'value1');

Sizin örnek ıin gibi bu isterseniz kendi rota yapmak zorunda.