hnrazevedo/viewer

个人项目开发工具

v2.0.5 2020-11-30 00:14 UTC

README

Maintainer Latest Version Scrutinizer Code Quality Build Status Software License PHP from Packagist Total Downloads

Viewer是一个简单的MVC项目可视化层管理组件。它可以单独作为静态组件使用,也可以作为中间件一起使用。其作者不是开发领域的专业人士,而是一位在技术领域不断学习的人。

O Viewer é um componente simples de administração da camada de visualização de projetos MVC. Ele pode ser usado individualmente de forma estática ou em conjunto como middleware. Seu autor não é profissional da área de desenvolvimento, apenas alguem da área de Tecnologia que está aperfeiçoando seus conhecimentos.

亮点

  • 易于设置(Fácil de configurar)
  • 遵循标准PSR-15(Segue padrão o PSR-15)
  • Composer ready(Pronto para o composer)

安装

Viewer可通过Composer获取

"hnrazevedo/Viewer": "^2.0"

或终端

composer require hnrazevedo/Viewer

方法

扩展

  • 视图文件:view.php
  • 导入文件:inc.php

基本使用

require __DIR__.'/../vendor/autoload.php';

use HnrAzevedo\Viewer\Viewer;

/**
 * Render method:
 * string $filename
 * ?array $data
 * ?bool $return
*/

Viewer::path(__DIR__.'/Views/') 
      ->render('default');    

返回渲染

要返回变量中的内容而不是渲染,请使用render方法的可选参数

Para retornar em uma váriavel o conteúdo ao invés de ser renderizado, utilize o parametro opcional do método render

require __DIR__.'/../vendor/autoload.php';

use HnrAzevedo\Viewer\Viewer;

/**
 * Render method:
 * string $filename
 * ?array $data
 * ?bool $return
*/

$html = Viewer::path(__DIR__.'/Views/')->render('default', null, true);    

视图和控制器之间的数据传输

require __DIR__.'/../vendor/autoload.php';

use HnrAzevedo\Viewer\Viewer;

$data = [
    'parameter'=>
        [
            'param1' => 1,
            'param2' => 'param2Value'  
            'param3' => '<a href="#">Parameter3</a>'  
        ]    
    ];

Viewer::path(__DIR__.'/Views/')
      ->render('default', $data);

在视图中返回数据

默认情况下,htmlspecialchars函数用作转义,以防止XSS攻击。

É utilizado de forma padrão a função htmlspecialchars como escape para evitar ataques XSS.

语法

语法

{{ $var }} htmlspecialchars

要显示不带空格的信息,请使用以下语法

Para exibir informações sem espace utilize a sintaxe

{{!! $var !!}} NO htmlspecialchars

HTML文件示例

<html>
    {{ $parameter }}
    {{ $parameter.param2 }}
    {{ $parameter.param3 }}
    {{!! $parameter.param3 !!}}
</html>

注意:如果视图中没有变量来替换定义的值,则文本将可见

HTML文件结果示例

<html>
    {{ $parameter }}
    param2Value 
    <a href="#">Parameter3</a> 
    <a tag>Parameter</a tag>
</html>

返回对象属性

重要:要返回对象的任何属性,该属性必须是公共的,以便使用“get_object_vars”函数返回,或者必须定义一个名为“getVars”的函数,返回一个包含需要执行的属性的数组 __get。

Models\User.php

namespace Model;

class User{
    public string $name = '';
    private string $lastname = 'Azevedo';
    private string $testValue = '123';

    public array $data = [];

    public function __construct()
    {
        $this->data = ['email','password','birth','username','testValue'];
    }

    public function getVars(): array
    {
        $vars = [];
        foreach($this->data as $var => $value){
            $vars[$var] = null;
        }
        return $vars;
    }

    public function __set(string $field, $value)
    {
        $this->data[$field] = $value;
    }

    public function __get(string $field)
    {
        return $this->data[$field];
    }
}

Example\User.php

$user = new Model\User();

$user->name = 'Henri';
$user->email = 'hnr.azevedo@gmail.com';
$user->birth = '28/09/1996';
$user->username = 'hnrazevedo';
$user->testValue = '321';

Viewer::path(__DIR__.'/Views/')->render('default', ['user'=>$user]);

default.view.php

{{ $user.name }} -> execute $user->name -> $user->name
{{ $user.email }} -> execute $user->email -> $user->__get('email')
{{ $user.bitrh }} -> execute $user->bitrh -> $user->__get('bitrh')
{{ $user.username }} -> execute $user->bitrh -> $user->__get('username')
{{ $user.lastname }} -> It is not executed, as private properties are not returned in the "get_object_vars" function
{{ $user.testValue }} -> execute $user->testValue -> $user->__get('testValue')

default.view.php的结果

Henri Azevedo 
hnr.azevedo@gmail.com 
28/09/1996 
hnrazevedo
{{ $user.lastname }}
321

在视图中导入内容。

注意:文件扩展名inc.php

注意:文件路径是从定义的视图路径中获取的

<html>
    <body>
        <?php $this->import('../Imports/header'); ?>
        <main>
            ...
        </main>
        <?php $this->import('../Imports/footer'); ?>
    </body>
</html>

如果找不到文件,为了防止页面中断,将显示一个带有错误消息的div,而不是include。

Caso o arquivo não seja encontrado, para não haver quebra de página, é resultado uma div com a mensagem de erro no lugar do include.

<html>
    <body>
        <div class='view error'>Component error: Impotation file does not exist: header.inc.php .</div>
        <main>
            ...
        </main>
        <footer>
            ...
        </footer>
    </body>
</html>

HTML压缩

从视图或include返回的所有代码都被压缩。因此,为了避免代码问题,在渲染内容时忽略所有注释。

Todo código retornado de uma view ou include é compressado. Com isto, para evitar problemas de código, todos os comentários são ignorados na renderização do conteúdo.

源代码

<html>
    <body>
        <main>
            <!-- Multi-line 
                             comment --> ...
        </main>
        <footer>
            ...
        </footer>
    </body>
    <script>
        ...; // Single line comment
        /* comments */ ...; /* comments */
        /* 
            Multi-line
            commnets
        */
        ...;
    </script>
</html>

渲染代码

<html><body><main>...</main><footer>...</footer></body><script>...;...;...;</script></html>

支持

安全:如果您发现任何与安全相关的问题,请通过电子邮件hnr.azevedo@gmail.com联系,而不是使用问题跟踪器。

Se você descobrir algum problema relacionado à segurança, envie um e-mail para hnr.azevedo@gmail.com em vez de usar o rastreador de problemas.

致谢

许可

麻省理工学院许可证(MIT)。更多信息请参阅许可文件