0

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

$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/project/public。现在我想通过系统(重定向)组装一个 url,它在没有子目录的情况下组装它。

$this->_redirect(
    $this->view->url(array(
        'action' => 'index',
        'controller' => 'index')
    ),
    array( 'prependBase' => false )
); 

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

最好的方法是什么?

4

2 回答 2

0

您必须在您的 frontController 配置(在您的 application.ini 中)中指定您的“子目录”,它会自动添加到生成的 url。

resources.frontController.baseUrl = "/project/public"
于 2011-09-20T17:04:15.430 回答
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');

于 2011-09-24T19:00:57.693 回答