Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/243.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend MVC页面结构&;布局链接';s路径_Php_Zend Framework - Fatal编程技术网

Php Zend MVC页面结构&;布局链接';s路径

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

我有一个使用布局的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还比较陌生,所以我不确定如何解决这个问题。因此,我返回并再次给每个页面它自己的控制器


所以我的问题有两个:我是否需要考虑避免给每个页面分配自己的控制器,如果我确实需要精简这个结构,我需要调整什么来纠正链接的路径?感谢您的考虑。

忽略关于控制器框架/数量的讨论,目前来说,这太过分了。脚本/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_框架中提供静态内容的问题()同意,这对于静态内容来说太过分了。然而,这只是一个更大项目的第一阶段。一两周后,我将添加数据库。感谢链接。分别处理开发和生产环境的资源。那太好了。谢谢你回答了一个我都不知道的问题。谢谢你的帮助。没问题,添加了一个编辑,以包含布局脚本中所需的行,因为我错过了该部分,以防其他人过来阅读。