PHP Micro-Framework HLEB






3.77/5 (20投票s)
本文概述了微框架 HLEB 的安装、定制、路由、路由组、控制器、模块、模板、页面构建器、调试面板和控制台。
微框架 HLEB
需要 PHP 版本 7.0 或更高版本(包括版本 8)。
链接到说明文档 (俄语)
路由 > 控制器 > 模型 > 页面构建器
微框架 HLEB 的一个显著特点是代码的极简性和工作速度。 选择此框架可以让你以最小的时间成本启动一个功能完善的产品,并简化文档查阅; 它简单、易用、快速。 同时,它解决了典型的任务,如路由、将操作转移到控制器、模型支持,因此实现了基本的 MVC。 这是快速启动应用程序所需的最低限度。
安装
启动微框架 HLEB
- 从其原始位置下载包含该项目的文件夹 (phphleb/hleb)。
使用 Composer
$ composer create-project phphleb/hleb
- 将资源地址分配给“public”子目录。
- 设置权限以允许 Web 服务器更改“storage”文件夹及其中的所有文件夹和文件。
完成这些步骤后,你可以在浏览器的地址栏中键入之前分配的资源地址(本地或远程服务器)来验证安装。 如果安装成功,将显示带有框架徽标的已停放页面。
自定义
微框架 HLEB 中的命令字符常量在 start.hleb.php 文件中设置。 最初,不存在具有此名称的文件,必须从同一项目根目录中的 default.start.hleb.php 文件复制。
注意!常量 HLEB_PROJECT_DEBUG
启用/禁用调试模式。 不要在公共服务器上使用调试模式。
路由
项目路由由开发人员在“/routes/main.php”文件中编译,可以将来自“routes”文件夹的其他包含路由的文件插入(包含)到此文件中,它们共同构成路由映射。
路由由 Route
类方法确定,其中主要方法是 get()
。 此类的所有方法均可用且仅在路由映射中使用。
注意!路由文件会被缓存,不应包含任何包含外部数据的代码。
Route::get('/', 'Hello, world!');
使用 view()
函数(在控制器中也可用)显示“/views/index.php”文件的内容。
Route::get('/', view('index'));
这是一个更复杂的命名路由的示例。 在这里,$x
和 $y
值被传输到“/views/map/new.php”文件,并且设置了动态地址的条件(“version
”和“page
”可以取不同的值)。 你可以使用框架的专用函数通过其名称调用路由。
Route::get('/ru/{version}/{page?}/', view('/map/new',
['x' => 59.9, 'y' => 30.3]))->where(['version' => '[a-z0-9]+',
'page' => '[a-z]+'])->name('RouteName'); // /ru/.../.../ or /ru/.../
路由组
位于路由或组之前的方法
type()->, prefix()->, protect()->, before()->
Route::prefix('/lang/')->before('AuthClassBefore')->getGroup();
Route::get('/page/', "<h1>Page</h1>"); // /lang/page/
Route::protect()->type('post')->get('/ajax/', '{"connect":1}'); // /lang/ajax/
Route::endGroup();
位于路由或组之后的方法
->where(), ->after()
Route::type(['get','post'])->before('ClassBefore')->get
('/path/')->controller('ClassController')->after('ClassAfter');
控制器
创建具有此类内容的简单控制器
// File /app/Controllers/TestController.php
namespace App\Controllers;
use App\Models\UserModel;
use Hleb\Constructor\Handlers\Request;
class TestController extends \MainController
{
function index($value) // $value = 'friends'
{
$data = UserModel::getData(['id' => Request::get('id'), 'join' => $value]);
return view('/user/profile', ['data' => $data]);
}
}
你可以在路由映射中使用它
Route::get('/profile/{id}/')->controller
('TestController',['friends'])->where(['id' => '[0-9]+']);
或
Route::get('/profile/{id}/')->controller
('TestController@index',['friends'])->where(['id' => '[0-9]+']);
从 URL 替换类和方法调用
Route::get('/example/{class}/{method}/')->controller('<class>Controller@get<method>'); //Converts `site.com/example/all-users/user/` to `AllUsersController@getUser`
模块
对于模块化开发,你需要创建文件夹“modules”。
- /modules/example
- /DefaultModuleController.php(或者在路由中不指定控制器的情况下使用“Controller.php”)
- /content.php
- /templates/origin.php
Route::get('/test/module/example/')->module('example', 'DefaultModuleController');
// File /modules/example/DefaultModuleController.php (similar to standard controller)
namespace Modules\Example;
class DefaultModuleController extends \MainController
{
function index()
{
return view('content');
}
}
// File /modules/example/content.php
insertTemplate('/example/templates/origin');
模型
// File /app/Models/UserModel.php
namespace App\Models;
class UserModel extends \MainModel
{
static function getData($params)
{
$data = /* ... */ // A query to the database, returning an array of user data.
return $data;
}
}
ORM
- 推荐使用 phphleb/xdorm ORM 或 DB(PDO 之上的附加组件)类。
互斥锁
$ composer require phphleb/conductor
在需要锁定对任何代码的访问,直到它在当前进程中执行或设定的锁定时间段到期的情况下,使用互斥锁是有价值的。
依赖注入实现
$ composer require phphleb/draft
$ php console phphleb/draft --add
这种方式与传统的 DI(依赖注入)不同,因为它不是在运行时以编程方式注入依赖项,而是通过根据设置生成和更改类来预先注入依赖项。 创建的类作为文件存在;可以检查它们的正确性,依赖项对于 IDE 是“可见的”,因此可以进行测试。
用户注册
$ composer require phphleb/hlogin
$ php console phphleb/hlogin --add
这两个步骤安装注册模块。 更多详情
模板
// File /resources/views/content.php
insertTemplate('templates/origin', ['title' => 'Short text', 'content' => 'Long text']);
// File /resources/views/templates/origin.php
echo $title; // Short text
echo $content; // Long text
页面构建器
Route::renderMap('#Header_map', ['/parts/header', '/parts/resources']);
Route::renderMap('#Footer_map', ['/parts/reviews', '/parts/footer']);
Route::get('/', render(['#Header_map', '/pages/index', '#Footer_map'], ['variable' => 'value']));
可选使用 Twig 模板引擎
$ composer require "twig/twig:^3.0"
Route::get('/template/', view('templates/index.twig', ['variable' => 'value']));
调试面板
WorkDebug::add($debug_data, 'description');
控制台
标准控制台命令列表(从项目文件夹运行)
$ php console --help
$ php console default-task
历史
- 2022年1月7日:更新页面构建器
- 2021年12月24日:includeTemplate 方法已被替换为 insertTemplate
- 2021年12月4日:添加了互斥锁
- 2021年11月3日:DI(依赖注入)实现
- 2021年10月3日:用户注册模块
- 2021年2月3日:控制器中的标签替换
- 2020年12月13日:PHP 8 支持
- 2020年5月27日:增加了对“Twig”的支持
- 2020年3月20日:添加了模块化开发
- 2019年12月27日:初始版本