65.9K
CodeProject 正在变化。 阅读更多。
Home

PHP Micro-Framework HLEB

starIconstarIconstarIcon
emptyStarIcon
starIcon
emptyStarIcon

3.77/5 (20投票s)

2019年12月25日

MIT

3分钟阅读

viewsIcon

35614

downloadIcon

18

本文概述了微框架 HLEB 的安装、定制、路由、路由组、控制器、模块、模板、页面构建器、调试面板和控制台。

HLEB LOGO

微框架 HLEB

需要 PHP 版本 7.0 或更高版本(包括版本 8)。

链接到说明文档 (俄语)

路由 > 控制器 > 模型 > 页面构建器

微框架 HLEB 的一个显著特点是代码的极简性和工作速度。 选择此框架可以让你以最小的时间成本启动一个功能完善的产品,并简化文档查阅; 它简单、易用、快速。 同时,它解决了典型的任务,如路由、将操作转移到控制器、模型支持,因此实现了基本的 MVC。 这是快速启动应用程序所需的最低限度。

安装

启动微框架 HLEB

  1. 从其原始位置下载包含该项目的文件夹 (phphleb/hleb)。

    使用 Composer

    $ composer create-project phphleb/hleb
  2. 将资源地址分配给“public”子目录。
  3. 设置权限以允许 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日:初始版本
© . All rights reserved.