Zend2重用与图片相同的视图文件

时间:2015-09-15 18:55:07

标签: php zend-framework2

我有一个控制器有两个动作,使用完全相同的视图文件(index.phtml)

如果网址例如: localhost / public / map 然后,图像文件的URL是 localhost / public / style / img.jpg 但是如果我在同一个控制器中使用不同的操作,那么URL将更改为 localhost / public / map / style / img.jpg 不存在的内容。

此外,如果我没有使用相同的模板,因此我有一个单独的模板用于选择操作,它执行完全相同的操作,因此它将在URL中有额外的“地图”字。

任何想法我怎么能解决这个问题?

示例代码:

控制器

public function indexAction(){
    $view = new ViewModel();
    return $view;

public function chooseAction(){
    $view = new ViewModel();
    $view->setTemplate("map/index"); //will not work with just "index"
    return $view;
}

index.phtml

<?php
 // module/Map/view/index.phtml:

 $title = 'Map';
 $this->headTitle($title);
?>
<img src="style/img.jpg"/>

1 个答案:

答案 0 :(得分:0)

您可以简单地指向图像的绝对路径:

<?php
// module/Map/view/index.phtml:

$title = 'Map';
$this->headTitle($title);
?>
<img src="/public/style/img.jpg"/>

如果您希望将模板命名为index而不是map/index,则必须更改config文件夹中template_map文件中module.config.php的模板名称:

现在可能看起来像这样:

'view_manager' => array(
    //...other things
    'template_map' => array(
        'map/index' => __DIR__ . '/../view/layout/index.phtml',
        //...more view templates
    )
)

只需更改为&#39; map / index&#39;指数&#39;。然后你可以这样做:

$view->setTemplate("index"); 

更新

comment我明白,部分问题在于您不想对文件夹名称进行硬编码。在这种情况下,您始终可以使用the php __NAMESPACE__ constant。这可能会解决您在模块内部硬编码路径的问题。

如果您稍后将您的网站放在一个文件夹中,并且您正确配置了所有内容,那么使用图像的绝对路径应该不是问题。