我有一个控制器有两个动作,使用完全相同的视图文件(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"/>
答案 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。这可能会解决您在模块内部硬编码路径的问题。
如果您稍后将您的网站放在一个文件夹中,并且您正确配置了所有内容,那么使用图像的绝对路径应该不是问题。