带有subdir的Zend Framework主机名路由

时间:2011-09-20 16:22:05

标签: php zend-framework zend-controller-router

我项目的一个模块应该拥有自己的域名,所以我为它创建了一个路径:

$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 )
); 

是的,我知道解决它的最简单的方法,就是配置一个虚拟主机,但是我无法找到另一个解决方案,它允许它在没有虚拟主机的情况下运行并在路由中手动设置路径。

最佳方法是什么?

2 个答案:

答案 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');