Zend MVC页面结构&布局链接的路径

时间:2012-04-03 22:54:13

标签: php zend-framework

我有一个使用布局的工作zend mvc应用程序,这个布局使用外部样式表和脚本。站点中的每个页面都有自己的控制器,每个页面的页面特定内容都在其index.phtml文件中。布局有效,所有脚本/样式表都适用于每个控制器的index.phtml。

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

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

这种方法打破了布局中外部脚本/样式表的所有链接。布局仍然有效,但链接的路径都不起作用。显然,这是一个与路径相关的问题,但我仍然相对较新,所以我不知道如何解决这个问题。所以我回去了,再给每一页自己的控制器。

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

2 个答案:

答案 0 :(得分: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页。除非你的网站会看到大量的流量以及每个字节或ms的数量,否则我不认为降低框架所增加的小开销的可维护性这一点。

同样的逻辑适用于控制器。当他们明确分开工作职能时,我不明白你为什么要减少它们的数量。另外,除非你更改路由器site.com/index/about看起来比site.com/about更丑:)

答案 1 :(得分:0)

我不确定您的视图中是如何创建路径和网址的,但是您是否使用了baseUrl帮助程序? $ this-&gt; baseUrl([file])