wscore/

为旧版和简单的PHP脚本提供页面控制器。

0.5.0 2022-02-24 02:10 UTC

This package is not auto-updated.

Last update: 2024-09-19 14:13:22 UTC


README

一个为优秀的旧版(且臭名昭著)PHP代码提供的页面控制器。

这是一个组件,希望它能让我这样的人(也就是我)在维护旧式PHP代码时更加容易。

例如,以下

http://example.com/example.php

目标是让你在直接访问PHP的情况下,也能自由地使用控制器。

许可证

MIT许可证

安装

针对PHP 5.6进行优化。目前仅提供beta alpha版本。

composer require "wscore/pages: ^0.1"

演示

git clone https://github.com/WScore/Pages
cd Pages
composer install
cd public
php -S localhost:8000 index.php

在浏览器中访问 localhost:8000

简单使用

相对正常。

  1. 为页面创建一个 Controller 并生成一个对象。
  2. 使用 Dispatch 执行控制器。
  3. 在视图目录下创建一个HTML页面。

创建一个控制器。

通过继承 ControllerAbstract 来创建它。

use WScore\Pages\AbstractController;

class MyController extends AbstractController {
    private $user;
    public function __construct($loginUser) {
        $this->user = $loginUser;
    }
    public function onGet($id) {
        return $this->render('user.php', [
            'user' => $this->user,
        ]);
    }
}

运行控制器。

在一个PHP文件中执行(Dispatch)控制器。

use Laminas\Diactoros\ServerRequestFactory;
use WScore\Pages\Dispatch;

$request = ServerRequestFactory::fromGlobals();
$controller = new DemoController();

$view = Dispatch::create($controller, __DIR__ . '/views')
    ->handle($request);
$view->render();

Dispatch 用于会话管理和CSRF令牌检查。

要执行的控制器的名称由以下之一确定。

  • 从HTTP方法名称。
  • 从GET/POST中的“act”值,调用 onMethod

如果你正常访问网站,将调用 onGet。如果你通过表单提交,将调用 onPost

视图文件

在示例代码中,“__DIR__ . '/views'”是视图目录。

在此目录中创建“user.php”。

use WScore\Pages\View\Data;
/** @var Data $_view */

$user = $_view->get('user');
?>
<! -- show user -->
  • $this 是从控制器Dispatch(PaveView)返回的对象。
  • $view 是一个包含绘制参数(Data)的对象。

其他功能

CSRF令牌。

$view对象输出CSRF令牌。

use WScore\Pages\View\Data;
/** @var Data $_view */

echo $_view->makeCsRfToken();

在提交时,检查CSRF令牌。如果检查失败,将导致关键错误。

关键错误。

这是针对 PageView 的一个特殊错误。

use WScore\Pages\PageView;
/** @var PageView $view */

if ($view->isCritical()) {
    $view->setRender('critical.php');
}
$view->render();
  • 如果在执行控制器时捕获到异常,它将是一个关键错误。

消息和刷新

你可以在控制器的 messageerror 中指定消息。

use WScore\Pages\AbstractController;

class MsgController extends AbstractController
{
    public function onGet()
    {
        $this->message('please try this demo!');
        $this->error('maybe not!');
        return $this->render('message.php');
    }
}

在视图PHP中,你可以显示消息,如下所示;

use WScore\Pages\PageView;
/** @var PageView $view */

echo $view->alert();

闪存消息

use WScore\Pages\AbstractController;

class MsgController extends AbstractController
{
    public function onGet()
    {
        $this->flashMessage('thank you!');
        $this->flashError('sorry!');
        return $this->location('example.php');
    }
}

使用与消息相同的PHP代码进行显示。

XSS防护

t.b.w.

HTML表单

t.b.w

致谢

README.md 通过www.DeepL.com/Translator(免费版本)翻译。

然后由我进行了一些修正。