2011-01-14 1 views
4

Новое для Zend и проблема с маршрутизацией.Zend: не удается получить маршрутизатор, работающий от Bootstrap.php

Я могу получить маршрутизацию, используя файл application.ini, но не могу заставить маршрутизатор работать с использованием начальной загрузки. Я просмотрел довольно много учебников, но большинство из них, похоже, относится к более старым версиям Zend Framework. Я использую 1.10.

В моей Bootstrap у меня есть:

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initRouter() 
    { 
     $frontController = Zend_Controller_Front::getInstance(); 
     $router = $frontController->getRouter(); 
     $route = new Zend_Controller_Router_Route(
      'aaa', 
      array(
       'controller' => 'index', 
       'action'  => 'browse' 
      ) 
     ); 
     $router->addRoute('test', $route); 
    } 
} 

И мой index.php

// Define path to application directory 
defined('APPLICATION_PATH') 
    || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); 

// Define application environment 
defined('APPLICATION_ENV') 
    || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); 

// Ensure library/ is on include_path 
set_include_path(implode(PATH_SEPARATOR, array(
    realpath(APPLICATION_PATH . '/../library'), 
    get_include_path(), 
))); 

/** Zend_Application */ 
require_once 'Zend/Application.php'; 

// Create application, bootstrap, and run 
$application = new Zend_Application(
    APPLICATION_ENV, 
    APPLICATION_PATH . '/configs/application.ini' 
); 

$application->bootstrap() 
      ->run(); 

Если я указываю мой браузер http://www.mysite.com/aaa

Я получаю следующее сообщение об ошибке

An error occurred 
Page not found 
Exception information: 

Message: Invalid controller specified (aaa) 
Stack trace: 

#0 /usr/share/php/libzend-framework-php/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) 
#1 /usr/share/php/libzend-framework-php/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch() 
#2 /usr/share/php/libzend-framework-php/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run() 
#3 /var/www/mysite.com/directory001/public/index.php(26): Zend_Application->run() 
#4 {main} 

Request Parameters: 

array (
    'controller' => 'aaa', 
    'action' => 'index', 
    'module' => 'default', 
) 

Это кажется таким прямым, но, похоже, не работает.

Может ли кто-нибудь увидеть, что я могу делать неправильно?

ответ

1

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

Я никогда не использовал загрузку, поэтому, возможно, у вас есть проблемы. Попробуйте следовать пути выполнения и посмотреть, не будет ли весь маршрутизатор не создан с нуля по пути еще раз (т. Е. Переопределить ваш). \

Если это не так, проверьте, что такое request_uri. Маршрутизатор соответствует вашему маршруту в $ request-> getPathInfo(). Посмотрите, что это значит.

Не бойтесь просматривать источник. Я попытался сделать его максимально читаемым, насколько это возможно:

http://framework.zend.com/svn/framework/standard/trunk/library/Zend/Controller/Router/Rewrite.php

+0

Хммм - Спасибо за идеи, однако я вернулась к Application.ini метода маршрутизации. Единственная причина, по которой я пытался выполнить маршрутизацию из Bootstrap, заключалась в том, что я думал, что это нужно сделать так, чтобы использовать помощник URL. Теперь я могу увидеть, как использовать помощник URL с маршрутами, установленными в application.ini. – someuser

1

Ваш код выглядит правильно для меня, в моем bootsrap я следующее:

$router = Zend_Controller_Front::getInstance()->getRouter(); 
$router->addRoute('sitemap', new Zend_Controller_Router_Route('sitemap.xml', array('controller'=>'index','action'=>'sitemap'))); 

Изменен:

$router = Zend_Controller_Front::getInstance()->getRouter(); 
$router->addRoute('sitemap', new Zend_Controller_Router_Route('si', array('controller'=>'index','action'=>'sitemap'))); 

Оба по-прежнему работают, либо попав в sitemap.xml в si .....

Что входит в ваш файл application.ini?

Вместо того, чтобы работать в вашем index.php:

$application->bootstrap()->run(); 

В моей application.ini у меня есть, это запускает приложение, включая загрузчиком - не уверен, если это будет делать никакой разницы, я на самом деле не заглянул в бутстрап, как только я его заработал:

bootstrap.path = APPLICATION_PATH "/Bootstrap.php" 
bootstrap.class = "Bootstrap" 
1

Ошибка проста.Изменение,

$router->addRoute('test', $route); 

в

$router->addRoute('aaa', $route); 

Я искал маршрутизации с Bootstrap.php и получил свой пост. Тогда я тоже застрял с той же ошибкой. Позднее заметили это и нашли, что это работает.

Благодаря вам слишком

1
$router = Zend_Controller_Front::getInstance()->getRouter(); 
     $catRoute = new Zend_Controller_Router_Route_Static(
       'aaa', 
        array(
         'controller' => 'index', 
         'action'  => 'browse' 
        ) 
     ); 
$router->addRoute('category', $catRoute); 
Смежные вопросы