mpphp/view

MPPHP 视图库。

v1.0.0-alpha 2019-05-01 17:48 UTC

This package is auto-updated.

Last update: 2024-08-29 05:00:27 UTC


README

MPPHP 视图库。

视图是包含在浏览器上打印的代码的文件。MVC 架构要求我们将业务逻辑与这些视图文件分开。传统上,初学者认为应该在表单相同的文件上调用数据库或处理表单

<?php 
    if (isset($_POST['submit'])) {
        // Process the form...
        // ...and maybe redirect to somewhere else if they succeed.
        // Else display the for again
    }
?>

<form method="post">
    // Required inputs

    <input type="submit" name="submit" value="Sign in">
</form>

这会是一个糟糕的想法,因为现在你的视图已经知道了你的后端代码。现在,大多数人会在这个时候说,他们将在不同的文件中编写逻辑,并像这样包含它

<?php  include ('/form-processing.php') ?>

<form method="post">
    // Required inputs

    <input type="submit" name="submit" value="Sign in">
</form>

技术上,这两个版本是相同的,视图仍然知道后端逻辑。

有很多第三方模板引擎,如 Smarty、Latte、Mustache,但大多数 PHP 框架都自带自己的模板引擎,例如 Symfony 有 Twig,Laravel 有 Blade,Phalcon 有 Volt。而 MPPHP 好吧,它只有一个包含函数的单个文件,这些函数模仿了模板引擎的重要特性,如继承和分区/块,我们喜欢称之为 VIEW。

定义布局

使用模板引擎的两个主要好处是模板继承和分区。为了入门,让我们看一个简单的例子。首先,我们将检查一个“主”页面布局。由于大多数 Web 应用程序在各个页面上保持相同的一般布局,因此将此布局定义为单个 Blade 视图很方便

<!-- Stored in resources/views/layouts/app.phtml -->

<html>
    <head>
        <title>App Name - <?= _view__nest('title') ?></title>
    </head>
    <body>

        <?= _view__include('sidebar') ?>

        <div class="container">
            <?= _view__nest('content') ?>
        </div>
    </body>
</html> 

如你所见,这个文件包含典型的 HTML 标记。然而,请注意 _view__nest() 和 _view__include() 函数。_view__include 函数,如名称所示,包含一个模板,而 _view__nest() 函数用于显示给定分区的内容。

现在我们已经为我们的应用程序定义了布局,让我们定义一个继承布局的子页面。

扩展布局

在定义子模板时,使用 _view__extends() 函数指定子模板应该“继承”哪个布局。可以扩展布局的模板可以通过将其内容包装在与其父 _view__nest() 函数中传入的相同名称的函数中,向父模板注入内容。记住,如上例所示,这些分区的内容将在布局 _view__nest('content') 中显示

<!-- Stored in resources/views/child.phtml -->

<?php _view__extends('layouts/app') ?>

<?php function title() { ?>
    Child Page
<?php } ?>

<?php function content() { ?>
    <p>This is my body content.</p>
<?php } ?>

从这个部分开始,我们将讨论在视图或模板文件中使用 PHP 的最佳实践。

显示数据

要将 PHP 值显示到浏览器,我们将使用 echoprint,但如果你在 PHP 开关中唯一要做的是 echoprint,则可以使用简写版本,如下所示

<?= $data ?>

这比

<?php print $data ?> or <?php echo $data ?>

简单多了,不是吗?

控制结构

年轻的开发者通常会将视图与业务逻辑混合在一起,这使得前端开发者(他们对 PHP 的了解很少)无法工作,例如,可以找到以下代码的视图

<body>

    <?php

    foreach ($data as $info) {
        $output  = '<div>';
        $output .= '<p>'. $info . '</p>';
        $output .= '</div>;
    }

    echo $output;
    ?>

</body>


如果你和你的朋友在学校项目上工作,而且你在后端工作,我想我们都可以同意上面的内容对前端处理的人来说可能太多。一种更干净的方法是尽快从 PHP 中退出

<body>

    <?php foreach ($data as $info) { ?>
        <div>
            <p> 
                <?= $info ?>
            </p>
        </div>
    <?php } ?>

</body>

这将使任何前端人员都能够更容易地在你的项目上工作,而无需担心 PHP,我的意思是它在那里,但他们可以很容易地忽略,与上一个版本相比。

此步骤适用于控制结构和逻辑表达式。