我想避免在我的视图中使用标记.然而,我很难加载页眉和页脚文件,因为它们以文本形式输出,而不是由PHP处理RequireOnce‘file’.我明白为什么会这样,但我不知道该怎么做.

controller/home.php

<?php

$params = [
   'page_title' => 'My Page Title'
];

renderView('/views/home.view.php', $params);

functions.php

function renderView($view, array $params = []): void
{
    $template = file_get_contents($view, FILE_USE_INCLUDE_PATH);

    foreach($params as $key => $value)
    {
        $template = str_replace('{{ ' . $key . ' }}', $value, $template);
    }

    echo $template;
}

/views/home.view.php

<?php require_once('header.view.php'); ?>

<main>Main content.</main>

<?php require_once('footer.view.php'); ?>

/views/header.view.php

<html>
<head>
<title>{{ page_title }}</title>
</head>
<body>

推荐答案

如果您想要替换页眉和页脚,则需要通过renderView()函数输出它们,而不是直接使用require_once.即,从主视图中删除对页眉/页脚的引用:

<main>Main content.</main>

并将它们移动到主控制器:

renderView('/views/header.view.php', $params);
renderView('/views/home.view.php', $params);
renderView('/views/footer.view.php', $params);

不过,您必须小心,您不希望将PHP源代码和可替换标记放在同一文件中.所以,你可能应该用not来命名你的观点,以*.php结尾.

Php相关问答推荐

Laravel中的通配符Undot数组

在WooCommerce Checkout帐单地址字段后插入自定义按钮

自定义通知在Woocommerce我的帐户自定义端点页面上不起作用

如果再次调用SESSION_START(),会话.gc-max是否会重新启动?或者它是从第一次创建会话开始计算的?

PHP -多维数组到一维数组

目标类[Set_Locale]不存在.拉威尔

如何不重新查询模型A-&>;相关模型B-&>模型

限制某些产品只能在WooCommerce的特定邮政编码/邮政编码范围内发货

在 WooCommerce 订阅续订订单中设置送货方式

在 Woocommerce 邮箱订单中显示产品 GTIN

WooCommerce 中一件免费产品的数量折扣

根据小计向 WooCommerce Checkout 添加佣金

Google Drive API 服务->文件->get('root') 失败并显示找不到文件. (范围问题?)

当我激活插件时出现错误注意:未定义的偏移量:1

基于WooCommerce中的产品变体自定义感谢页面跳转

在WooCommerce购物车和 checkout 页面中更改总计文本

在WooCommerce单产品页面中显示特价产品的节省金额

自定义主键值未正确显示

Eloquent 的模型更新了它应该 laravel php 的更多行

如何在 Laravel 9 中判断异常是否可报告?