2010-11-27 3 views
0

В настоящее время я работаю с Zend для моего проекта. Этот проект имел категории. Обычно я переписывал URL-адреса с помощью Zend-маршрутов, поэтому я мог бы достигнуть своей страницы следующим образом: http: //site.ext/category/ [category-name] /. Но для целей SEO я хотел бы создать URL-адрес корневого уровня. Другими словами: http: //site.ext/ [category-name] /.Zend: маршрут на уровне «root»

Но, конечно, Zend попытается найти контроллер, который называется [название категории]. Каков наилучший способ обойти эту проблему? Я подумал о чем-то вроде «резервного контроллера». Если страница не найдена, пусть контроллер обратного вызова обрабатывает запрос и проверяет, существует ли категория. Если нет: перейдите к контроллеру ошибок.

Это лучшее решение, и каково мнение моих коллег-программистов?

С наилучшими пожеланиями,

Мартейн

ответ

0

Я сделал по существу то, что вы предложили. Я расширил Zend_Controller_Action и определил свои маршруты во время выполнения в init()

Технически он работал нормально. Было ли это эффективным, или наилучшим возможным решением, я не знаю, но это сработало для меня.

0

Не используйте маршруты маршрутизатора по умолчанию - удалите их и настройте самостоятельно.

0

Наконец-то пошел плагин переднего контроллера, это фрагмент кода, который я использую в настоящее время.

<?php 
class App_Controller_Plugin_Seo extends Zend_Controller_Plugin_Abstract 
{ 
    public function preDispatch(Zend_Controller_Request_Abstract $request) 
    { 
    // Retreive request params (module/controller/action/<params>) 
    $params = $request->getParams(); 

    // Initiate categories model 
    $providers = new Application_Model_DbTable_Providers; 

    // Lookup provider 
    $provider = $providers->getProviderByUrl($params[ 'controller' ]); 

    // If the provider exists 
    if (! is_null($provider)) { 

     // Rewrite request 
     $request->setModuleName('default') 
       ->setControllerName('provider') 
       ->setActionName('view') 
       ->setParams(
        array(
         'url' => $params[ 'controller' ] 
        ) 
       ); 

     return; 

    } 

    return; 
} 
} 
?> 
Смежные вопросы