gpt4 book ai didi

php - 如何仅将 Zend Framework 用于布局?

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:57:24 27 4
gpt4 key购买 nike

我最近受命帮助一个项目,该项目由除 PHP 联系表单外的各个 HTML 文件组成。因此,甚至没有一点面向对象编程、MVC 或布局(甚至 PHP)的暗示。

项目很大,但我想慢慢将Zend Framework集成到这个项目中,主要是开始使用布局。有太多的冗余以至于在一个文件中进行小的更新是浪费时间。

在 PHP 的早期,您可以通过将内容 block 包含在每个页面(例如页眉和页脚)中来分隔内容 block 。现在,使用 Zend Framework 等 MVC 框架,您可以使用 View 助手创建包含单个页面内容( View )的布局文件。我真的很喜欢这个,因为这意味着我只需要在一个地方“包含”我的页眉或页脚。

但是,如果不分派(dispatch)/引导应用程序(即使用 Zend Framework MVC 组件作为独立组件),我不确定这将如何工作。将站点切换为使用布局的最佳方法是什么?它是如何工作的?这是个好主意吗?

最佳答案

我最近开始转换混搭文件结构*,以利用 ZF 的布局和 View 。目标是将所有包含 html 的文件移动到 recommended file structure 中。用于布局和 View 。这是为此做准备的方法:

  1. 从每个文件中提取所有标记,在其中保留变量但没有逻辑。将此文件命名为/application/views/scripts/page/view.phtml(例如/application/views/scripts/index/login.phtml)
  2. 创建一个适合大多数页面的框架作为/application/layouts/scripts/layout.phtml 并让它包含如下内容:

    <?php echo $this->doctype('XHTML1_STRICT'); ?>
    <html>
    <head>
    <?php echo $this->headLink(); ?>
    </head>
    <body>
    <div id="wrapper">
    <?php echo $this->layout()->content; ?>
    </div>
    </body>
    </html>
  3. (将 Zend 添加到您的包含路径并注册它的自动加载器。)创建一个将包含在您所有文件中的文件(除非您有一个 single point of entry,在那种情况下 - 将它放在那里!)创建对您的布局的引用,等同于:

    $view = new Zend_View();
    $view->setScriptPath('/application/views/scripts');

    $layout = new Zend_Layout();
    $layout->setLayoutPath('/application/layouts/scripts');
    $layout->setView($view);

    Zend_Registry::getInstance()->set('layout', $layout);
  4. 您留下的每个 php 文件(带有逻辑,而不是 html)都需要访问布局并对其进行修改:

    $layout = Zend_Registry::getInstance()->get('layout');

    $view = $layout->getView();
    $view->headLink()->appendStylesheet('/css/a_css_file.css');

    // most important step, done automatically when using MVC, but now you have to do it manually
    $layout->content = $view->render('index/login.phtml');

    echo $layout->render();
  5. 最重要的下一步是添加另一个布局:

    // /application/layouts/scripts/blank.phtml
    <?php echo $this->doctype('XHTML1_STRICT'); ?>
    <html>
    <head></head>
    <body>
    <?php echo $this->layout()->content; ?>
    </body>
    </html>

    在你的一个包含逻辑的文件中

    $layout = Zend_Registry::getInstance()->get('layout');
    $layout->setLayout('blank');

理想情况下,在不久的将来,您可以通过查看 Front Controller 等设计模式来开始适应类似 MVC 的结构。

*一个文件:模型、 Controller 、html,无逻辑顺序。

关于php - 如何仅将 Zend Framework 用于布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/851785/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com