Rota mevcut denetleyicileri dışındaki PageController aracılığıyla tüm istekleri (Zend Framework)

2 Cevap php

Yeni bir CMS için bana sitenin ağaç yapısını yönetmenize olanak tanıyan bir sayfalar modülünü geliştirdik. Her sayfa url http://www.example.com/pageslug/ pageslug çağrılan sayfayı tanımlayan nerede ulaşılabilir.

Ben şimdi ne elde etmek istiyorsun (örneğin resim gibi) mevcut bir denetleyiciye bir istek olmadıkça bana bir tek PagesController rota gelen tüm istekleri sağlayan bir yoldur.

It's easy enough to catch all requests to the Pages Controller but how to exclude existing controllers? This is my module bootstrap. How can i achieve this in the most preferrable way

<?php

class Default_Bootstrap extends Zend_Application_Module_Bootstrap
{

    protected function _initRoute()
    {
        $this->bootstrap('frontController');

        /* @var $frontcontroller Zend_Controller_Front */
        $frontcontroller = $this->getResource('frontController');

        $router = $frontcontroller->getRouter();
        $router->addRoute(
            'all',
            new Zend_Controller_Router_Route('*',
                array('controller' => 'pages',
                      'action'     => 'view')
            )
        );

    }

}

2 Cevap

Zend yolları için çalışmak - Eğer ilk sonra ikinci bir yol eklerseniz, o if it matches öncelik alacaktır. Kendi Zend projede ben yollarının bir sürü var, ilki bir catch tüm rota, seninkine çok benzer. Ancak, url maçları bunun altında birşey kılar - yani sadece (tüm / user / istekleri user_controller giderseniz, bir / user / * yol eklemek) biraz daha spesifik yolları eklemeyi deneyin

Sayfalarınız denetleyici varsayılan yapma ve mevcut her kontrolör için bir rota ekleyerek çok hızlı bir şekilde çok dağınık olsun, ve bunu bir denetleyici eklemek her zaman değiştirmek zorunda kalabilirsiniz.

Alternatif bir ErrorController özelleştirmek için olabilir. Eksik bir denetleyici durumunda bu yana, çerçeve Zend_Controller_Dispatcher_Exception hangi bir EXCEPTION_NO_CONTROLLER, sadece bu tür kontrol ve iletmek gibi hata işleyicisi aracılığıyla yaymak olacaktır atacağım sizin sayfaları denetleyicisi.

Eğer mazoşist duygu iseniz, ayrıca denetleyici varsa ve tüm yolları değilse kolları false döndüren bir özel rota sınıf yazabilirsiniz. Bu muhtemelen uygulamak için roller ve sorumluluklar açısından en iyi seçenek, ama aynı zamanda en karmaşık.