Zend_Controller_Router_Exception: "xyz"

5 Cevap php

Ben mevcut Zend Framework uygulamasında bir sorun var.

Benim Bootstrap ben bu rotaları kayıt:

protected function _initRouter()
{
    $this->bootstrap("FrontController");
    $frontController = $this->getResource("FrontController");

    $route = new Zend_Controller_Router_Route(
    	":module/:id",
    	array(
    		"controller" => "index",
    		"action" => "index"
    		),
    	array("id" => "\d+")
    	);
    $frontController->getRouter()->addRoute('shortcutOne', $route);

    $route = new Zend_Controller_Router_Route(
    	":module/:controller/:id",
    	array("action" => "index"),
    	array("id" => "\d+")
    	);
    $frontController->getRouter()->addRoute('shortcutTwo', $route);

    $route = new Zend_Controller_Router_Route(
    	":module/:controller/:action/:id",
    	null,
    	array("id" => "\d+", "action" => "\w+")
    	);
    $frontController->getRouter()->addRoute('shortcutThree', $route);
}

Şimdi sonra benim projeye Zend_Navigation ekledi. Ben modül bootstrap navigasyon elemanları kayıt çeşitli modüller var:

<?php

class Contact_Bootstrap extends Zend_Application_Module_Bootstrap
{
    protected function _initNavigation()
    {
    	$layout = $this->getApplication()->getResource("layout");
    	$view = $layout->getView();

    	$config = new Zend_Config_Xml(dirname(__FILE__)."/config/navigation.xml", "nav");

    	$view->navigation()->addPage($config);
    }
}

Benim tarayıcıda uygulamayı açtığınızda her şey çalışıyor. Ben navigasyon görmek ve belirtilen sayfayı görüntülemek için kendi linklere tıklayabilirsiniz anlamına gelir. Modülü /: action /: Ben kullanan bir sayfa vurduğunuzda ama id rota, Navigasyon Yardımcının Zend_Controller_Router_Route istisna atar:

Ölümcül hata: Zend_Controller_Router_Exception: id C belirtilmemiş: \ Entwicklung \ kt yönü \ gövde \ src \ library \ hattında 519 Zend \ Görünüm \ Yardımcı \ Navigasyon \ HelperAbstract.php

Eğer herhangi biri de bu hatayı yaşadınız mı? Bana yardım ya da bana tavsiye verebilir eğer çok iyi olurdu. Ayrıca vb benim kurulum hakkında daha fazla bilgiye ihtiyacınız varsa, bana söyle.

Teşekkür ederiz!

5 Cevap

Ben çözüme kendimi buldum.

Bu sorun nedeniyle Zend_Navigation elemanlarının bir-so-yararlı değil davranışlara neden oldu. Onların getHref () yönteminde onlar URL yardımcıyı kullanın. Bu yardımcı gezinti öğesi (modülü, denetleyici, aksiyon, vs) için belirtilen argümanlar alarak, navigasyon giriş için bağlantı vardır URL oluşturur

Şimdi sorun, bu sizin bootstrap ben yaptım gibi, örneğin özel bir rota oluşturduk varsa

":module/:controller/:id"

Bu yol kullanılır edilirken, URL yardımcı navigasyon girişi için bağlantı oluşturmak için bu yolu kullandığı sorun haline çalıştırmak. Ancak, ek bir "id" parametresine geçemedi, bu yüzden durum var.

Yani bir çözüm "varsayılan" olarak ayarlandığında her Zend_Navigation_Page_Mvc örneği "rota" için ek bir parametre geçmektir.

Ben henüz denemek vermedi başka bir çözüm, gibi varsayılan rota üzerine sadece re-map kendisi, yeni özel rota izin vermektir:

":module/:controller/:action/id/$id"

Bunu yapmak için Zend Framework ile yeteneği varsa Ama ben bilmiyorum.

": Modül /: kontrolörü /: id" sadece varsayılan değer tanımlamak gerekir: id Bu rotada

Örnek:

<content type="Zend_Controller_Router_Route">
    <route>content/:engine</route>
    <defaults module="content" controller="engine" action="index" engine="" />
</content>

İngilizcem için özür dilerim :)

Saygılar.

$route = new Zend_Controller_Router_Route( 
    "info/:id", 
    array( 
        "controller" => "index", 
        "action" => "index" 
    ), 
    array("id" => "\d+") 
); 

değiştirildi

$route = new Zend_Controller_Router_Route( 
    "info/:id", 
    array( 
        "controller" => "index", 
        "action" => "index",
        "id" => "default"
    )
); 

benim için çalıştı, ama muhtemelen gitmek için en iyi yol değildir

Ben sadece sizinkine benzer bir sorunla karşılaştı ettik ama bunun için farklı bir çözüm bulduk. Ben sadece bilgi uğruna burada paylaşacağım.

Tıpkı sizin gibi, benim sorunum, benim navigasyon son kullanılan rota kullanılarak inşa edilmiş gibi görünüyordu. Bu benim özel yollarından biri kullanılmış olsaydı, ben tanımlandığı değil, bu belirli bir rota için bazı özel parametreler şikayet istisnalar bir yığın olsun istiyorum anlamına geliyordu.

Benim güzergahları 'özel parametreler' değer varsayılan çoğu benim güzergah tanımı null. Bunun yerine, özel durum aslında yok olacağını'' için varsayılan değer değişti eğer ben keşfettim. Sanırım - yüzden biraz googling başladı ve doğru yolu üzerine götürdü hangi mesaja rastladım ben gerçekten bu anlayamadık.

Benim seyir unsurları yüzden istek üzerine tüm Zend_Navigation_Page elemanları üretmek ve (ben önbelleklenebilecek yapmak benim kapsayıcı nesne seri, ama şu an alakalı değil) benim görüşüm yardımcıları kabı geçmek bir veritabanında saklanır. Gerçekten'' için params 'varsayılan değerini değiştirme yani bir rota kullanmak için, benim veritabanında saklanan tüm sayfa öğelerini değiştirmek için çalıştı yazınızın tarafından ima yapıyor "iyi" bir şekilde, gibi seeemed olduğunu bulamadık Onlar açıkça özel bir rota kullanmak gerekiyordu ve bunun için tanımlanmış params vardı sürece 'default' adında. Açıkça varsayılan yol kullanmak için seyir noktaları tanımlayarak da hile yapmak gibi görünüyordu ve benim için daha temiz bir çözüm olarak görünüyor.

Teşekkürler bu hataya neden olan ne ipucu için - hariç, gerçekten nereden başlayacağınızı hakkında hiçbir ipucu yoktu :)

Burada iki çözüm bakın:

  1. Siz _initRouter sizin rota parametreleri () için varsayılan bir değer olabilir, ama siz (istemediğiniz zaman örn. Bu durumda bu yol kullanılır olabilir) istediklerini olmayabilir

  2. Sen navigation.xml (params özelliği) rota parametreleri belirtebilirsiniz. Eğer onları sabit ayarlamak istemiyorsanız, navigasyon xml nesil için PHP kodu yazmak gerekir.