Zend:无法从Bootstrap.php获取路由器

时间:2011-01-14 18:44:43

标签: php zend-framework

Zend的新功能并且路由存在问题。

我可以使用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',
) 

这似乎很直接,但似乎没有用。

任何人都可以看到我可能做错了吗?

4 个答案:

答案 0 :(得分:1)

好像你正在使用默认路线,所以我最好的猜测是你的路线没有正确注册。

我从未使用过bootstrapping,所以也许你的问题就出现了。尝试按照执行路径查看整个路由器是否不是从头开始沿路径创建(即覆盖你的路径)。\

如果不是这样,请检查您的request_uri是什么。路由器正在匹配您的路由到$ request-> getPathInfo()。所以看看它返回的是什么。

不要害怕浏览来源。我试图让它尽可能可读:

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

答案 1 :(得分:1)

你的代码对我来说是正确的,在我的靴子里我有以下内容:

$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"

答案 2 :(得分:1)

错误很简单。 更改

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

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

我正在寻找使用BootStrap.php进行路由并得到你的帖子。然后我也陷入了同样的错误。后来注意到这一点,发现这个工作。

非常感谢你

答案 3 :(得分:1)

$router = Zend_Controller_Front::getInstance()->getRouter();
        $catRoute = new Zend_Controller_Router_Route_Static(
                'aaa',
                   array(
                       'controller' => 'index',
                       'action'     => 'browse'
                   )
        );
$router->addRoute('category', $catRoute);