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',
)
这似乎很直接,但似乎没有用。
任何人都可以看到我可能做错了吗?
答案 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);