2012-04-03 66 views
0

我有一个正在使用布局的zend mvc应用程序,此布局使用外部样式表和脚本。网站中的每个页面都有自己的控制器,每个页面的页面特定内容位于其index.phtml文件中。布局可以工作,并且所有的脚本/样式表都适用于每个控制器的index.phtml。Zend MVC页面结构与布局链接的路径

例如,主页是“mvcProject /”,它调用索引控制器的索引操作,索引控制器使用index.phtml文件。此外,关于我们的页面是“mvcProject/about”,它调用about控制器并显示views/about/index.phtml。主观上我觉得这种结构是低效的。这个网站的内容只是html,我看不出为什么每个页面都需要自己的控制器。

因此,我试图只使用一个控制器来实现相同的目标,即具有相同的体系结构,通过在单个索引控制器中为每个页面分配自己的操作。所以现在“关于我们”的页面是“mvcProject/index/about”,这样索引控制器就会调用about操作来使用views/index/about.phtml文件。

该方法打破了布局中所有到外部脚本/样式表的链接。布局仍然有效,但链接的路径都不起作用。显然,这是一个与路径相关的问题,但对于zend我还是比较新的,所以我不确定如何解决这个问题。所以我又回到了每个页面,重新拥有自己的控制器。

所以我的问题有两个方面:我是否需要关注自己,避免给每个页面添加自己的控制器,如果我确实需要缩小这个结构,我需要调整以纠正链接的“路径?感谢您的考虑。

+0

您正在使用Zend框架只提供HTML内容,没有数据库,没有动态?似乎矫枉过正使用这个框架来完成这项任务,更不用说为每个页面思考一个控制器是矫枉过正的。给每个页面分配自己的控制器并不是过分矫枉过正。这是MVC的用途,您将请求发送给控制器进行处理,然后控制器将返回响应。这是整个想法。看看这个关于在Zend_Framework中提供静态内容的问题(http://stackoverflow.com/questions/8946486/updated-best-practices-for-managing-static-content-in-zend-framework) – Flukey 2012-04-03 22:57:47

+0

同意,这将是单纯为静态内容矫枉过正。但是,这只是一个更大的项目的第一阶段。在一两周内,我将添加数据库。感谢您的链接。 – dsulli 2012-04-22 07:31:44

回答

1

现在忽略关于框架/控制器数量的讨论是过度的。你的脚本/ 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; 
} 

CONFIGS /的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 :)

+0

分别处理开发和生产环境的资源。这很光滑。谢谢。你回答了我甚至不知道我有的问题。谢谢你的帮助。 – dsulli 2012-04-04 01:14:14

+0

没问题,添加了一个编辑,以包含布局脚本中所需的行,因为我错过了该部分以防其他人出现并阅读它。 – 2012-04-04 07:51:46

0

我不知道你的路径和URL是如何创建在你的意见,但你使用baseUrl帮手? $ this-> baseUrl([file])