webdevlabs/phreak

Phreak! 最终极的劣质开发工具 :)

0.1.1 2019-01-19 10:47 UTC

README

Build Status Codacy Badge SymfonyInsight StyleCI

由Phroute(URL路由)、PHP-DI(依赖注入容器)、Smarty(模板引擎)、Stash(缓存库)、Zend Diactoros(请求/响应处理器)、RelayPHP(中间件调度器)、PSR7-Middlewares(PSR-7中间件集合)驱动的超轻量快速PHP框架

安装

composer create-project webdevlabs/phreak

使用内置PHP网络服务器本地运行应用

php -S localhost:8000 -t public

自动加载器

使用 命名空间 作为文件路径非常简单易懂。所有目录名称都转换为小写,文件大小写保持不变。例如

<?php
use App\Controllers\Front;

将自动加载文件 \app\controllers\Front.php

简单路由

使用 {id} 参数作为参数调用 App\Controllers\User::displayUser($id) 方法

$router->get('/users/{id}', ['App\Controllers\User','displayUser']);

控制器路由

使用适当的请求方法调用 App\Controllers\Front.php。

$router->controller('/', 'App\Controllers\Front');    

高级路由

过滤器

调用类 App\Models\Auth 的方法 checkLogin() 并在 return false 时中断。

$router->filter('auth', ['App\Models\Auth','checkLogin']);

通过过滤器将所有请求分组到 http://host/profile/

$router->group([
        'prefix'=>'profile', 
        'before'=>'auth'
    ], 
    function ($router) {
        $router->controller('/', 'App\Controllers\Account\Profile');    
    });

更高级的路由可以在 Phroute 的页面上找到。

验证

    public function postComment () 
    {
        $input  = filter_input_array(INPUT_POST, FILTER_SANITIZE_STRING);
        $val = new \System\Validation($input);
        $val->addRule('name', 'Empty name field', ['required']);
        $val->addRule('comment', 'Empty comment field', ['required','minLength=5']);
        $val->addRule('comment', 'Comment too big', ['maxLength=500']);
        if ($val->validate()) {
            echo 'Comment post ok';
        } else {
            $this->template->assign('errors',$val->getErrors());
            $this->template->display("errors.tpl");
        }        
    }

简单控制器

<?php

namespace App\Controllers;

use System\Template;
use System\Language;

class Front
{
    private $template;
    private $language;

    public function __construct (Template $template, Language $language) 
    {
        $this->template = $template;
        $this->language = $language;
    }

   public function getIndex()
    {
        $this->template->assign('title', 'Phreak!');
        $this->template->assign('languages', $this->language->available_languages);  
        $this->template->display('layout.tpl');
    }    
}

更高级的例子可以在 'modules' 目录中找到。

事件

use System\Event;
class ... {
    public function __construct (Event $event) 
    {
        $this->event = $event;
        $this->event->bind('someEventName', function () { echo "stay foolish"; });
    }
    public function getSome () {
        $this->event->trigger('someEventName');
    }
}

数据库

现在您有多种管理数据库的选项。有2个现有的数据库驱动。示例数据库包装类 DB:: 和广为人知的数据库映射器 Eloquent。

您可以直接从 config/database.php 中控制加载哪个数据库驱动程序

示例 PDO 驱动程序查询

 * Result: single column
 * $count = DB::column('SELECT COUNT(*) FROM `user`);

 * Result: an array(key => value) results (i.e. for making a selectbox)
 * $pairs = DB::pairs('SELECT `id`, `username` FROM `user`);

 * Result: a single row result
 * $user = DB::row('SELECT * FROM `user` WHERE `id` = ?', array($user_id));

 * Result: a single row result
 * $user = DB::row('SELECT * FROM `user` WHERE `id` = :varname', array(":varname"=>"some variable"));

 * Result: an array of results
 * $banned_users = DB::fetch('SELECT * FROM `user` WHERE `banned` = ?', array(TRUE));
 
 * Result: any query
 * $dosql = DB::query('UPDATE `settigs` WHERE `setid`=?', ['somesetid']);
 
 * Result: insert user
 * DB::insert('users', ['username'=>'test','password'=>'testpass']);

 * Result: update user password where user_id = 1
 * DB::update('users', ['password'=>'testpass'], '1', 'user_id');

管理数据库的新方法是 Eloquent(来自 Laravel 框架)。

《Eloquent ORM》为您提供了与数据库交互的美丽、简单的 ActiveRecord 实现。每个数据库表都有一个相应的“模型”,用于与该表交互。模型允许您查询表中的数据,以及向表中插入新记录。

phreak eloquent 使用示例可以在为演示制作的 'modules/eloq' 中找到。

完整的文档可以在 Eloquent 页面上找到。

控制台命令

您还可以通过调用控制台.php 文件来从您的控制台/crontab 执行 phreak 控制器,其中参数是控制器文件的名称。

使用适当的请求方法调用 App\Commands\SomeController.php。

php console.php SomeController

所有控制台控制器都位于“app/commands”文件夹中。文件夹位置在 'app/ConsoleController.php' 中定义,可以进行修改。