php slim validator,SlimCustom: 轻量级RESTFul开发框架 SlimCustom 可以帮助你快速编写简单但功能强大的 web 应用和 API。特色:HTTP 路由,中间...

SlimCustom 2.0 Framework

轻量级RESTFul开发框架 SlimCustom 可以帮助你快速编写简单但功能强大的 web 应用和 API。

特色:HTTP 路由,中间件,PSR-7 支持,依赖注入,门面模式,模型自动验证,字段预处理,多进程任务管理...

技术交流群 637251928

开始使用

注意:{$变量}需要替换成实际的值,拒绝无脑复制

安装 & 卸载

$SlimCustomFrameworkPath/bin/cmd $application app:make 安装

$SlimCustomFrameworkPath/bin/cmd $application app:remove卸载

web服务器

Nginx 配置

这是一个例子,在 Nginx 虚拟主机上针对域名 example.com 的配置。它监听80端口上的入境(inbound)HTTP 连接。它假定一个PHP-FPM服务器在端口9000上运行。你需要将 server_name, error_log, access_log, 和 root 这些指令修改成你自己的值。其中 root 指令是你的应用程序公共文件根目录的路径;你的 Slim 应用的 index.php 前端控制器文件应该放在这个目录中。

server {

listen 80;

server_name example.com;

index index.php;

error_log /path/to/example.error.log;

access_log /path/to/example.access.log;

root /path/to/public;

location / {

try_files $uri $uri/ /index.php$is_args$args;

}

location ~ \.php {

try_files $uri =404;

fastcgi_split_path_info ^(.+\.php)(/.+)$;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param SCRIPT_NAME $fastcgi_script_name;

fastcgi_index index.php;

fastcgi_pass 127.0.0.1:9000;

}

}

slim文档首页

目录结构

######框架

/bin/cmd命令入口文件(linux)

/bin/cmd.bat命令入口文件(windows)

/bootstrap/autoload.php自动载入

/bootstrap/dependencies.php框架依赖

/config/application.php暂时不用

/config/configs.php默认配置文件

/config/errors.php错误配置

/config/validation.php自动验证配置

/demo/应用demo

/docs/Api/基于phpDoc2生成的php接口文档

/Libs/Cache/Cache.php缓存

/Libs/Console/Console.php控制台

/Libs/Console/Daemon.php任务管理(支持进程管理)

/Libs/Container/Container.php容器

/Libs/Contracts/约定

/Libs/Controller/Api.php接口控制器

/Libs/Controller/Controller.php控制器抽象类

/Libs/Curl/Curl.phpcurl

/Libs/Filesystem/Filesystem.php文件

/Libs/Exception/SlimCustomException.php异常

/Libs/Handlers/Error.php异常处理

/Libs/Handlers/PhpError.phpphp错误处理

/Libs/Helpers/Facades.php助手门面

/Libs/Helpers/Helpers.php助手函数

/Libs/Http/Response.php响应

/Libs/Model/Query/PdoQuery.phpPDO查询类

/Libs/Model/Query/MongodbQuery.phpMongodb查询类

/Libs/Model/Model.php数据模型

/Libs/Pageinator/Pageinator.php分页

/Libs/Session/Session.phpsession

/Libs/Support/Arr.php数组

/Libs/Support/Collection.php集合

/Libs/Support/MessageBag.php消息包

/Libs/Support/Str.php字符串

/Libs/Traits/Macroable.php

/Libs/Traits/Single.php单例

/Libs/Valication/Validator.php 验证器

/Libs/App.php应用核心类

/vendor/vendor

/index.php入口文件

/README.MD文档

######Demo应用

/bootstrap/routes.php路由配置

/configs/configs.php配置文件

/Console/Console.php应用控制台

/Console/Commands/Hello.php 命令文件 (hello 命令)

/Controller/控制器

/Controller/Admin控制器分组

/Controller/Admin/Index.phpAdmin分组下的Index控制器

/data/logs/日志生成目录

/data/cache/缓存生成目录

/data/daemon/任务进程信息生成目录

/docs/docs

/Middlewares/中间件

/Middlewares/Admin/中间件分组

/Middlewares/Admin/Index.phpAdmin分组下的Index中间件

/Models/模型目录

/scripts/脚本目录

/scripts/Demo.phpDemo任务文件

/tests/测试

/public/开放目录

/public/views/视图目录

/public/index.php入口文件

/public/.htaccess.htaccess文件

配置

######通用

// set to false in production

'displayErrorDetails' => true,

// Allow the web server to send the content-length header

'addContentLengthHeader' => false,

// Renderer settings

'renderer' => [

'template_path' => App::publicPath() . '/views/'

],

// Monolog settings

'logger' => [

'name' => App::name(),

'path' => App::dataPath() . '/logs/' . App::name() . '_' . date('Ymd') . '.log',

'level' => \Monolog\Logger::DEBUG

],

// session

'session' => [

'driver' => 'cache',

'lifetime' => 120,

'expire_on_close' => false,

'encrypt' => false,

'files' => App::dataPath() . '/sessions/',

'connection' => null,

'table' => 'sessions',

'lottery' => [

2,

100

],

'cookie' => App::name() . '_session',

'path' => '/',

'domain' => 'hoge.cn',

'secure' => false

],

// 缓存

'cache' => [

'default' => 'file',

'prefix' => App::name(),

'stores' => [

'file' => [

'driver' => 'file',

'path' => App::dataPath() . 'cache'

],

'redis' => [

'driver' => 'redis',

'cluster' => false,

'servers' => [

[

'host' => '127.0.0.1',

'port' => 6379,

'database' => 0,

'password' => ''

]

]

]

]

],

// 数据库

'database' => [

'orm' => 'PDO',

'default' => 'mysql',

'prefix' => 'mxu_',

'connections' => [

'mysql' => [

'driver' => 'mysql',

'host' => '127.0.0.1',

'database' => 'mxu_message_collect',

'username' => 'root',

'password' => 'root',

'charset' => 'utf8',

'collation' => 'utf8_unicode_ci',

'strict' => false

]

]

]

######路由文件

namespace Demo\bootstrap;

use \SlimCustom\Libs\App;

// Routes Example

App::get('/[{name}]', function ($request, $response, $args) {

//Demo log message

$this->logger->info("Demo-Skeleton '/' route");

//Render index view

return $this->renderer->render($response, 'index.phtml', $args);

});

App::get('/hello/{name}', function ($request, $response, $args) {

return 'hello world';

});

App::group('/admin', function () {

$this->get('/index/{name}', \Demo\controllers\Admin\Index::class . ':index');

$this->post('/post', \Demo\controllers\Admin\Index::class . ':index');

//$this->get('/index/{name}', \Demo\controllers\Admin\Index::class . ':index')->add(\Demo\middlewares\Admin\Index::class . ':index');

});

######多任务配置

$daemon = Daemon();

$daemon->group('Demo', function () {

// 注册任务‘task1’,每隔10秒运行

$this->call(10, 'task1', function () {

while (true) {

logger()->info(getmypid());

sleep(1);

}

//sleep(10);

exit;

});

// 注册任务‘task2’,每隔5秒运行

$this->call(5, 'task2', function () {

while (true) {

logger()->info(getmypid());

sleep(1);

}

//sleep(5);

exit;

});

});

// 启动任务调度守护进程

$daemon->run();

控制器,模型,缓存等调用

/**

* @package index.php

* @author Jing

* @link http://www.slimphp.net

* @version 1.0

* @copyright Copyright (c) SlimCustom.

* @date 2017年5月2日

*/

namespace Demo\Controllers\Admin;

use Demo\Models\MessageConfigs;

use SlimCustom\Libs\Paginator\Paginator;

use SlimCustom\Libs\Model\Query\PdoQuery as Query;

use SlimCustom\Libs\Controller\Api;

use Demo\Interfaces\Admin\Index as IndexInterface;

use SlimCustom\Libs\Exception\SlimCustomException;

/**

* Controller Example

*

* @author Jing

*/

class Index extends \SlimCustom\Libs\Controller\Api implements IndexInterface

{

/**

* Model MessageConfigs

*

* @var \Demo\Models\MessageConfigs

*/

protected $messageConfigs;

/**

* construct 依赖注入

*

* @param MessageConfigs $messageConfigs

*/

public function __construct(MessageConfigs $messageConfigs)

{

parent::__construct();

$this->messageConfigs = $messageConfigs;

}

/**

* Action Example

*

* @param Request $request

* @param Response $response

* @param array $args

*/

public function index(\Slim\Http\Request $request, \SlimCustom\Libs\Http\Response $response, $args)

{

// Cache

cache()->put('Tokens.timestamp', time(), 1);

$timestamp = cache()->get('Tokens.timestamp', null);

// var_dump($timestamp);die;

// Session

session()->set('User.user_id', 12345);

// var_dump(session()->all());die;

// Validator

$validator = validator(request()->getParams(), [

'key' => 'required|integer'

]);

// var_dump($validator->messages());die;

// Curl

// $res = curl()->post('http://mxuapi-team.cloud.hoge.cn/api/tuji/detail/57?access_token=8925a79d6a0377211d0bdbc00a5734e')->response;

// var_dump($res);die;

// Model

try {

// mysql查询

// 绑定闭包处理rows

$closure = function (\SlimCustom\Libs\Support\Collection $row) {

$this->configs = unserialize($this->configs);

return $this;

};

$res = model('configs')->where('id', '

->bind($closure)

->rows();

// 插入

$res = model('configs')->rules([

'name' => 'required|string'

])->create($request->getParams());

// 更新

$res = model('configs')->rules([

'id' => 'required|integer'

])->renew($request->getParams());

// 删除

$res = model('configs')->rules([

'id' => 'required|integer'

], $request->getParams())

->where('id', '=', $request->getParam('id'))

->remove();

// 静态方法连贯调用

$res = MessageConfigs::where('id', 'rows();

// 使用注入对象

$res = $this->messageConfigs->where('id', '

->bind($closure)

->rows();

// 使用query对象

$res = MessageConfigs::query(function (Query $query) {

// Sql

$item = $query->select()

->limit(Paginator::COUNT, intval(request()->getParam('page', 1)) * Paginator::COUNT - Paginator::COUNT)

->execute()

->fetchAll();

// Page

return new Paginator($item, Paginator::COUNT, request()->getParam('page', 1), [

'mode' => 'list',

'isAll' => request()->getParam('is_all', false)

]);

});

// Mongodb

// 查询多个

$res = model('runoob')->rows([

'filter' => [

'create_user_id' => 1

]

]);

// 查询单个

$res = model('runoob')->row([

'filter' => [

'create_user_id' => 1

]

]);

// 创建

$res = model('runoob')->create($data)->isAcknowledged();

// 更新

$res = model('runoob')->renew([

'$set' => $data

], [

'create_user_id' => 1

]);

// 删除

$res = model('runoob')->remove([

'create_user_id' => 1

]);

// 原生方法调用

$res = model('runoob')->find([

'site_id' => 1

])

->toArray()

->statementResolve();

// Response

return response()->success($res->toArray());

}

catch (SlimCustomException $e) {

return response()->error($e->getCode(), $e->getMessage());

}

}

/**

* Renderer Example

*

* @param \Slim\Http\Request $request

* @param \SlimCustom\Libs\Http\Response $response

* @param array $args

* @return \Psr\Http\Message\ResponseInterface

*/

public function renderer(\Slim\Http\Request $request, \SlimCustom\Libs\Http\Response $response, $args)

{

return renderer()->render(response(), 'index.phtml', $args);

}

}

##任务管理

######进程结构关系

master(任务调度)-> forker (任务1)

-> forker (任务2)

######帮助

JingTongdeMac-mini:www jingtong$ php Demo/scripts/Demo.php help

命令 描述 使用

kill 关闭任务 kill 任务名称

killall 关闭所有任务

start 启动任务 start 任务名称

startall 启动所有任务

list 任务列表

help 帮助

JingTongdeMac-mini:www jingtong$

######列出任务

JingTongdeMac-mini:www jingtong$ php Demo/scripts/Demo.php list

task process lastRunTime stop

task1 36639 2017-07-05 05:59:03 0

task2 36640 2017-07-05 05:59:03 0

######启动所有任务

JingTongdeMac-mini:www jingtong$ php Demo/scripts/Demo.php startall

task result

task1 1

task2 1

JingTongdeMac-mini:www jingtong$ ps aux | grep php

jingtong 13878 0.0 0.1 2566948 4644 ?? Ss 3:59下午 0:00.01 php Demo/scripts/Demo.php startall

jingtong 13877 0.0 0.1 2566948 4636 ?? Ss 3:59下午 0:00.01 php Demo/scripts/Demo.php startall

jingtong 13876 0.0 0.0 2566948 2488 ?? Ss 3:59下午 0:00.01 php Demo/scripts/Demo.php startall

######关闭所有任务

JingTongdeMac-mini:www jingtong$ php Demo/scripts/Demo.php killall

task result

task1 1

task2 1

JingTongdeMac-mini:www jingtong$ ps aux | grep php

jingtong 13876 0.0 0.0 2566948 2552 ?? Ss 3:59下午 0:00.09 php Demo/scripts/Demo.php startall

######关闭单个任务

JingTongdeMac-mini:www jingtong$ php Demo/scripts/Demo.php kill task1

JingTongdeMac-mini:www jingtong$ ps aux | grep php

jingtong 13878 0.0 0.1 2566948 4644 ?? Ss 3:59下午 0:00.05 php Demo/scripts/Demo.php startall

jingtong 13876 0.0 0.0 2566948 2500 ?? Ss 3:59下午 0:00.05 php Demo/scripts/Demo.php startall

######启动单个任务

JingTongdeMac-mini:www jingtong$ php Demo/scripts/Demo.php start task1

JingTongdeMac-mini:www jingtong$ ps aux | grep php

jingtong 13890 0.0 0.1 2566948 4636 ?? Ss 4:02下午 0:00.01 php Demo/scripts/Demo.php startall

jingtong 13878 0.0 0.1 2566948 4656 ?? Ss 3:59下午 0:00.06 php Demo/scripts/Demo.php startall

jingtong 13876 0.0 0.0 2566948 2544 ?? Ss 3:59下午 0:00.07 php Demo/scripts/Demo.php startall

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值