Posts Tagged ‘Default Route’

Дефолтный маршрут в Zend Framework. Некоторые тонкости.

Вторник, Август 18th, 2009

По-умолчанию в схеме маршрутизации Zend Framework используется дефолтный маршрут. Он добавляется непосредственно перед началом процесса маршрутизации, в методе Zend_Controller_Router_Rewrite::route()

Дефолтный маршрут - это объект класса Zend_Controller_Router_Route_Module. При создании этого объекта в его конструктор передаются объекты диспетчера и запроса.

И тут есть такая тонкость: в конструкторе объекта дефолтного маршрута параметры диспетчера и запроса указаны как необязательные. Может возникнуть предположение, что если в конструктор не были переданы эти объекты, то они автоматически инициализируются внутри дефолтного роута. Так вот - это не так.

Если вы собрались переопределить Zend_Controller_Router_Route_Module, то не забывайте при инстанцировании своего класса всегда передавать в него диспетчер и объект запроса - иначе долго будете искать ошибку, почему ничего не работает (как я искал):

$front = Zend_Controller_Front::getInstance();

$front->getRouter()->addRoute('default',
    new My_Controller_Router_Route_Module(
        array(
                'lang'       => 'en',
                'module'     => 'application',
                'controller' => 'index',
                'action'     => 'index',
        ),
        $front->getDispatcher(),
        $front->getRequest()
    )
);

Мне не ясно, почему разработчики ZF сделали опциональными те два параметра. По-моему, их стоило бы сделать обязательными, тогда таких ошибок можно было бы не допускать.