我项目的一个模块应该拥有自己的域名,所以我为它创建了一个路径:
$portalurl = str_replace( 'http://', '', $config->domains->portal );
$hostnameRoute = new Zend_Controller_Router_Route_Hostname(
$portalurl,
array( 'module' => 'portal' )
);
$defaultroute = new Zend_Controller_Router_Route(
':controller/:action',
array(
'controller' => 'index',
'action' => 'index'
)
);
$contentroute = new Zend_Controller_Router_Route(
'page/:page',
array(
'controller'=> 'content',
'action' => 'show'
)
);
$router->addRoute( 'portalDefault', $hostnameRoute->chain($defaultroute) );
$router->addRoute( 'portalContent', $hostnameRoute->chain($contentroute) );
在我的测试系统中,我的应用程序位于/ project / public这样的子目录中,当我通过我在系统主机列表中输入的域打开模块时,它可以正常工作。 domain.lan /项目/公众。现在我想通过系统组装一个url(重定向),并在没有子目录的情况下对它进行汇编。
$this->_redirect(
$this->view->url(array(
'action' => 'index',
'controller' => 'index')
),
array( 'prependBase' => false )
);
是的,我知道解决它的最简单的方法,就是配置一个虚拟主机,但是我无法找到另一个解决方案,它允许它在没有虚拟主机的情况下运行并在路由中手动设置路径。
最佳方法是什么?
答案 0 :(得分:0)
您必须在frontController配置中指定“子目录”(在您的application.ini中),它将自动添加到生成的URL中。
resources.frontController.baseUrl = "/project/public"
答案 1 :(得分:0)
有时ZF无法正确检测到baseUrl
(它在某些方面都不是很好......)所以我们需要在引导程序中手动设置它;你应该能够在.ini中做到这一点,但它对我不起作用。
请注意,最好将其放在_initView
的开头,在其他任何地方之前:
protected function _initView()
{
// Set the Base URL (only needed sometimes)
$front = Zend_Controller_Front::getInstance();
$front->setBaseUrl( '/myapp/public' );
//initialize view
$view = new Zend_View...
然后使用baseUrl()
打包您的链接文件等:$this->baseUrl('css/template.css');