首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图理解PHP模板,板块

问试图理解PHP模板,板块
EN

Stack Overflow用户
提问于 2015-10-27 13:58:01
回答 1查看 3.3K关注 0票数 4

我对PHP很陌生,我试着理解如何与PHP一起使用一个简单的模板系统,我喜欢“板块”,主要是因为它自称是模板系统,而不是模板语言,但是文档有点混乱。作为一个例子,这个代码“控制器”离开?它是另一个PHP文件吗?

代码语言:javascript
复制
// Create new Plates instance
$templates = new League\Plates\Engine('/path/to/templates');

// Render a template
echo $templates->render('profile', ['name' => 'Jonathan']);

这个代码"profile.php“不应该在某个地方调用控制器文件吗?

profile.php

代码语言:javascript
复制
<?php $this->layout('template', ['title' => 'User Profile']) ?>

  <h1>User Profile</h1>
  <p>Hello, <?=$this->e($name)?></p>

模板文件:

template.php

代码语言:javascript
复制
<html>
 <head>
  <title><?=$this->e($title)?></title>
  </head>
  <body>

  <?=$this->section('content')?>

  </body>
 </html>

有没有人在PHP中有一个更好的代码示例,在PHP中我可以看到这个模板系统是如何工作的?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2022-11-06 13:35:52

我也想尝试一个纯php模板引擎,所以我也尝试了板块。这很简单。我喜欢简单问题的简单解决方案。它们的实现速度更快。

如果您是php新手,那么使用平板可以很好地开始编写“更干净”的代码,只需花费很少的时间。

因为您是PHP新手,所以需要先了解一些背景细节。那我想会很清楚的。

示例这里并不是很好,因为路径没有那么有用。假设他们打算显示完全限定的路径是必需的。一个更好的例子应该是这样的:

代码语言:javascript
复制
$templates = new Engine(__DIR__ . '/templates');

其中模板目录是演示者或控制器可能位于的当前文件夹的子目录。

由于模板是表示的核心,我认为演示者是使用模板的类的一个更好的名称,但是由于mvc的流行,很多人使用控制器。

“联盟\板块\引擎”是一个名称空间,而不是路径。如果需要,可以在类中为要从该命名空间使用的每个导入类包含一个" use“语句。

在他们的“安装”页面这里上,他们显示您必须编辑composer.json文件来加载板块。如果您不熟悉composer,只需安装它并在文件夹中运行"composer update“,其中包含安装页面中的composer.json文件,它将为您创建供应商文件夹,并提供运行板块所需的所有支持文件。它会将这些文件放在供应商文件夹中,这就是为什么您需要要求供应商/autooload.php。

板块还假定模板目录中的文件是php文件,这就是为什么它们不需要参数上的文件扩展名。因此,“模板”和“概要文件”直接引用template.php和profile.php文件。

模板背后的基本思想是将视图和代码分开。数据由代码获取并传递到视图中。这些模板文件表示视图,并通过示例中呈现函数中的关联数组将数据传递给模板。

因为板块是一个基于php的模板引擎,所以模板是php文件。因此,需要一些php编码才能从模型(关联数组)获取数据,以及循环构造等等。您想要实现的是,将代码保留为仅用于在html中呈现数据所必需的内容,而不是其他任何内容。

profile.php页面和template.php页面都是“模板”--如果要显示整个页面,template.php文件是有用的,但是如果只想输出html元素,就没有必要了。在后一种情况下,示例中的profile.php文件可以在没有可选页面“布局”的情况下生成。

因此,“呈现”函数的基本功能是加载由name指定的php文件,并根据自己的代码将关联数组中的所有数据插入到该文件中,并可选地将其关联的布局模板文件返回结果html。

使用模板的类--让我们称之为Presenter.php --应该包含类似于以下内容的代码:

代码语言:javascript
复制
<?php
require 'vendor/autoload.php';
use \League\Plates\Engine;

class Presenter {
    private $name;

    function __construct($name){
      $this->name = $name;
    }
    
    function render() {
      $templates = new Engine(__DIR__ . '/templates');
      echo $templates->render('profile', ['name' => $this->name]);
    }
}

像这样的index.php:

代码语言:javascript
复制
<?php
require(__DIR__ . '/Presenter.php');
$presenter = new Presenter('Jonathan');
$presenter->render();

..。

项目目录中的文件结构如下所示:

代码语言:javascript
复制
index.php
Presenter.php
templates/template.php
templates/profile.php
composer.json
composer.lock
vendor/...

这应该会让任何想尝试车牌的人都感兴趣。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33369997

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档