Php Zend MVC页面结构&;布局链接';s路径
我有一个使用布局的zend mvc应用程序,这个布局使用外部样式表和脚本。站点中的每个页面都有自己的控制器,每个页面的页面特定内容位于其index.phtml文件中。布局正常,所有脚本/样式表都正确地应用于每个控制器的index.phtml 例如,主页是“mvcProject/”,它调用索引控制器的索引操作,该操作使用索引控制器各自的index.phtml文件。此外,about us页面是“mvcProject/about”,它调用about控制器并显示views/about/index.phtml。主观上我觉得这种结构效率低下。这个网站的内容只是html,我不明白为什么每个页面都需要自己的控制器 因此,我尝试只使用一个控制器来实现相同的目的,即拥有相同的体系结构,在单个索引控制器中为每个页面提供自己的操作。现在“关于我们”页面是“mvcProject/index/about”,因此索引控制器将调用about操作,该操作将使用views/index/about.phtml文件 这种方法破坏了布局中指向外部脚本/样式表的所有链接。布局仍然有效,但链接的路径都不起作用。显然,这是一个与路径相关的问题,但我对zend还比较陌生,所以我不确定如何解决这个问题。因此,我返回并再次给每个页面它自己的控制器Php Zend MVC页面结构&;布局链接';s路径,php,zend-framework,Php,Zend Framework,我有一个使用布局的zend mvc应用程序,这个布局使用外部样式表和脚本。站点中的每个页面都有自己的控制器,每个页面的页面特定内容位于其index.phtml文件中。布局正常,所有脚本/样式表都正确地应用于每个控制器的index.phtml 例如,主页是“mvcProject/”,它调用索引控制器的索引操作,该操作使用索引控制器各自的index.phtml文件。此外,about us页面是“mvcProject/about”,它调用about控制器并显示views/about/index.pht
所以我的问题有两个:我是否需要考虑避免给每个页面分配自己的控制器,如果我确实需要精简这个结构,我需要调整什么来纠正链接的路径?感谢您的考虑。忽略关于控制器框架/数量的讨论,目前来说,这太过分了。脚本/css失败的原因确实是路径问题。如果使用布局辅助对象,则应使用视图中的headLink和headScript对象 这是我在开发过程中设置所需脚本和css文件的首选方法 Bootstrap.php
protected function _initView()
{
// Initalise the view
$view = new Zend_View();
$view->doctype('HTML5');
// Get config options for the UI
$ui = $this->getApplication()->getOption('ui');
$view->headTitle($ui['title']);
foreach ($ui['stylesheet'] as $stylesheet) {
$view->headLink()->appendStylesheet($stylesheet);
}
foreach ($ui['script'] as $script) {
$view->headScript()->appendFile($script);
}
$viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
'ViewRenderer'
);
$viewRenderer->setView($view);
return $view;
}
配置/application.ini
ui.title = "My Awesome Web App"
ui.stylesheet[] = "/extjs/resources/css/ext-all.css"
ui.stylesheet[] = "/resources/css/hod.css"
ui.stylesheet[] = "/resources/css/icons.css"
ui.stylesheet[] = "/resources/bootstrap/css/bootstrap.css"
ui.script[] = "extjs/ext-debug.js"
ui.script[] = "app.js"
布局/default.phtml
<?php echo $this->doctype(); ?>
<html>
<head>
<?php
echo $this->headTitle();
echo $this->headMeta();
echo $this->headStyle();
echo $this->headScript();
echo $this->headLink();
?>
</head>
<body>
<?php echo $this->layout()->content; ?>
</body>
</html>
这允许您在开发模式下设置所需的所有脚本,并在生产模式下设置缩小的脚本,而无需编写任何额外代码
回到过激的问题。我认为,即使你没有与数据库的连接,也没有应用程序中的所有细节,从维护的角度来看,使用框架仍然是最好的方法(一旦你赶上了框架的速度),如果你将拥有5或6个以上的页面。除非您的网站将看到巨大的流量和每个字节或毫秒的计数,否则我看不到降低框架增加的小开销的可维护性的意义
同样的逻辑也适用于我的控制器。我不明白你为什么要减少它们的数量,因为它们有助于明确划分工作职能。另外,除非您更改路由器site.com/index/about看起来比site.com/about:)更丑。我不确定如何在视图中创建路径和url,但您是否使用baseUrl帮助程序$这->baseUrl([文件])您使用Zend框架只提供HTML内容,没有数据库,没有动态内容?在这个任务中使用这个框架似乎有点过头了,更不用说认为每个页面的控制器都太过头了。让每个页面都有自己的控制器并不过分。这就是MVC的用途,您将请求路由到控制器进行处理,然后控制器将返回响应。这就是全部的想法。看看这个关于在Zend_框架中提供静态内容的问题()同意,这对于静态内容来说太过分了。然而,这只是一个更大项目的第一阶段。一两周后,我将添加数据库。感谢链接。分别处理开发和生产环境的资源。那太好了。谢谢你回答了一个我都不知道的问题。谢谢你的帮助。没问题,添加了一个编辑,以包含布局脚本中所需的行,因为我错过了该部分,以防其他人过来阅读。