0

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

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

因此,我尝试只使用一个控制器来达到相同的目的,即具有相同的架构,方法是在单个索引控制器中为每个页面提供自己的操作。所以现在“关于我们”页面是“mvcProject/index/about”,以便索引控制器会调用将使用views/index/about.phtml 文件的about 操作。

这种方法破坏了布局中所有指向外部脚本/样式表的链接。布局仍然有效,但链接的路径都不起作用。显然,这是一个与路径相关的问题,但我对 zend 还是比较陌生,所以我不确定如何解决这个问题。因此,我回去并再次给每个页面它自己的控制器。

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

4

2 回答 2

1

现在忽略关于框架/控制器数量的讨论是过分的。您的脚本/css 失败的原因确实是路径问题。如果您正在使用布局助手,那么您应该在视图中使用 headLink 和 headScript 对象。

这是我在开发时设置所需的脚本和 css 文件的首选方式。

引导程序.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;
}

配置/应用程序.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 更丑 :)

于 2012-04-03T23:28:21.663 回答
0

我不确定您的路径和 url 是如何在您的视图中创建的,但是您使用 baseUrl 助手吗?$this->baseUrl( [文件] )

于 2012-04-04T08:34:12.837 回答