0

我已经安装了 composer 并验证它运行正常

这在我的控制器中:

//index.php
<?php
require 'vendor/autoload.php';
use League\Plates\Engine;

$templates = new Engine('/templates');

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

这是我的布局:

//layout.php
<?php $this->layout('template', ['title' => $title ]) ?>

<p>Hello, <?= $name ?></p>
<?

这是我的模板:

//template.php
<html>
<head>
    <title><?= $title ?></title>
</head>
<body>
    <?= $this->section('content') ?>
</body>
</html>

这是我得到的错误:

GET /templates/template.php - 未捕获的错误:当不在 /home/finsoft2/Documenti/Playground/plates test/templates/template.php:6 的对象上下文中时使用 $this 堆栈跟踪:#0 {main} 抛出 /第 6 行的 home/finsoft2/Documenti/Playground/plates test/templates/template.php

4

1 回答 1

0

您提供的代码基本上没问题,除了两个小问题:

  • 应删除 layout.php 中错误的结束标记。
  • 您在构造函数中输入的模板目录Engine是绝对路径。最安全的选择是使用__DIR__预定义的常量来引用路径。这将导致: $templates = new Engine(__DIR__.'/templates');

但是您看到当前错误消息的原因在于其他地方:您正在对 /templates/template.php 执行 GET 请求。您应该执行对 index.php 的请求。直接访问模板文件时,模板引擎不存在,解释器也不知道如何填充变量。

于 2021-07-29T07:17:33.257 回答