hnrazevedo / viewer
个人项目开发工具
Requires
- php: >=7.4
- hnrazevedo/http: dev-master
README
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.
致谢
- Henri Azevedo(开发者)
许可
麻省理工学院许可证(MIT)。更多信息请参阅许可文件。