coreyolson/framework

一个简约的PHP框架

0.9.9 2021-01-23 00:08 UTC

This package is auto-updated.

Last update: 2024-09-04 12:27:50 UTC


README

一个简约的PHP框架

设计轻量级、快速且易于使用。提供现代网站的基本要素;例如,简单的请求路由到控制器,然后可以调用模型或视图。一个简约的PHP 7.0+框架。

入门

所有请求通过 index.php 路由到控制器。应用和框架逻辑位于 application 文件夹中。子文件夹标记为:控制器、助手、库、模型和视图,均在同一主 application 文件夹内。

快速安装

无需设置。 mod_rewrite 可选,但理想情况下建议启用。所有请求都通过 public/index.php。根据需要修改 public/index.php。没有 mod_rewrite 的 URL 为:/index.php/controller/method/param1/param2/

使用 PHP Composer 安装
composer create-project coreyolson/framework folder
建议的重写规则
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond \$1 !^(.*\..*) [NC]
RewriteRule ^(.*)$ ./index.php/\$1 [L]

构建网站或Web应用的结构

路由逻辑放在 controllers 中,应用逻辑放在 models 中,而 views 包含模板。可以使用替代路由(例如,通过另一个文件包含 Framework.php),同时仍然可以访问库、助手和视图。

路由

框架通过 {controller}/{action}/{param1}/{param2} 路由URL。打印内部方法 f::info() 提供更多见解。默认控制器是 home.php,默认操作/方法为 index,并可更改。框架查找 before_{method}()after_{method}()。这些可以通过在 public/index.php 中传递您所需的偏好设置来更改,例如通过 framework::index('home/index', 'before/after');

GET example.com/project/list

路由到 project.php 控制器,或 404错误 如果控制器不存在。

  • 如果存在,则运行 get() 方法
  • 如果存在,则运行 before() 方法
  • 如果存在,则运行 get_before() 方法
  • 如果存在,则运行 before_list() 方法
  • 如果存在,则运行 before_get_list() 方法
  • 运行 get_list() 方法,或 404错误 如果方法不存在。
  • 如果存在,则运行 after_get_list() 方法
  • 如果存在,则运行 after_list() 方法
  • 如果存在,则运行 get_after() 方法
  • 如果存在,则运行 after() 方法

通过打印 f::info() 获取内部框架和路由信息。

基本用法

使用 f::method() 会有轻微的性能损失,但提供了开发中的便利。为了最佳性能,请使用完全限定的名称访问类和方法;例如,使用 Array Helper 的 \helpers\arr::keys();

自动加载任何助手或库
f::class()->method();                  // f::arr(), f::benchmark(), f::page(), f::file()
使用控制器、模型、助手或库
f::controller('home')->get_index();    // controllers\home::get_index();
f::model('template')->demo();          // models\template::demo();
f::helpers('arr')->keys();             // helpers\arr::keys();
f::library('benchmark')->mark();       // libraries\benchmark::mark();
使用视图
echo f::view('filename');              // view::echo('filename');
使用动态视图
f::view('filename', ['var' => 'val']);	// view::return('filename', ['var' => 'val']);

高级用法

根据需要,在 public/index.php 中添加自定义路由;例如,route::verb('/{pattern}', function () { //code }); 可以使用任何HTTP动词,即使是非标准动词。有两个框架特定的动词 route::anyroute::port,它们具有匹配 任何 HTTP动词的独特功能,并在匹配 端口 请求时立即运行框架路由。

GET 请求到 example.com/users/

route::get('/users/', function () {
    //code
});                                             // Continues processing

POST 请求到 example.com/users/edit/

route::post('/users/edit/', function () {
    //code
}, true);                                       // Stops processing on TRUE

PORT 请求到 example.com/internals/

route::port('/internals/', function () {});     // Switches to framework:index() routing

定时任务配置

该框架可以作为cron调度器使用;然而,仍然需要在web服务器上配置cron任务。以下代码每分钟运行一次框架的cron调度器;它会在 _application/controllers/cron 文件夹中查找计划运行的控制器。使用框架的调度选项来配置所需的时间和频率。

(crontab -l 2>/dev/null; echo "# * * * * * wget https:///?_cron -O /dev/null") | crontab -

注意:框架必须能够写入 storage/ 文件夹,以使Crons能够工作;或者,您可以在 _storage/ 下手动创建一个可写文件 _storage/cron.json;如果使用不同的 _cron配置/文件夹,请相应调整。

框架中的示例Cron任务/控制器
<?php

namespace controllers\_cron;

class example
{
    public static $options = [
        'dayOfWeek' => 'friday',
        'frequency' => 'everyFiveMinutes',
        'between'   => ['1:00 am', '2:30 am'],
    ];

    public static function index()
    {
        // Code here
    }
}

许可证

在MIT许可证下发布。所有贡献均在MIT许可证下发布。