yaf-skeleton
yaf 基本功能介绍(含常用类库)
安装
composer create-project phpcasts/yaf-skeleton yaf-demo dev-master -vvv
加速版:
composer create-project phpcasts/yaf-skeleton yaf-demo dev-master --repository-url https://packagist.phpcomposer.com -vvv
Required
安装YAF扩展 yaf安装
php.ini 配置: 开启命名空间 yaf.use_namespace = true
使用命名空间引入需要的文件
composer
运行
cd yaf-demo
php -S localhost:8080 public/index.php
open localhost:8080
应该就可以看到 Hello World! 了,有兴趣的同学可以继续看后面的大概介绍。
说明
配置环境 开发环境: yaf.environ = develop , 生产环境: yaf.environ = production
默认情况下 controllers,views,modules,library,models,plugins 是在根 namespace
service目录的namespace 是配置在 App\Services 下,需在 composer.json的autoload下的psr-4配置
第三方类库使用Composer安装
开发规范遵循 PSR2, PSR4规范
目录结构
.
├── README.md
├── application
│ ├── Bootstrap.php // app启动文件
│ ├── controllers // 默认controller
│ │ ├── Error.php // 错误controller, 出错时会调用该文件
│ │ └── Index.php
│ ├── constants // 常量定义目录,按模块划分文件
│ │ ├── Forum.php
│ │ └── User.php
│ ├── library // 框架lib库, 所有自定的都可以写到这里来
│ │ ├── Core
│ │ │ ├── Caches
│ │ │ ├── Captcha
│ │ │ ├── Controllers
│ │ │ ├── Databases
│ │ │ ├── Http
│ │ │ ├── Support
│ │ │ ├── Upload
│ │ │ ├── Validators
│ │ │ └── Views
│ │ └── README.md
│ ├── models // model目录
│ │ ├── User.php
│ │ └── Forum.php
│ ├── modules // 模块目录,里面可以有多个模块
│ │ ├── Api // APP接口位置
│ │ ├── Console // 脚本目录
│ │ ├── Admin // 后台目录
│ │ │ ├── Bootstrap.php // Admin的Bootstrap文件,只对Admin生效
│ │ │ ├── controllers // controller 目录
│ │ │ │ ├── Base.php
│ │ │ │ └── Index.php
│ │ │ └── views // 模板目录
│ │ │ ├── index // 业务目录
│ │ │ │ └── index.phtml
│ │ │ └── layout.phtml // 布局文件
│ │ └── Home // 前端目录
│ │ ├── controllers
│ │ │ ├── Forum.php
│ │ │ └── User.php
│ │ └── views
│ │ ├── user
│ │ │ ├── index.phtml
│ │ │ └── profile.phtml
│ │ └── forum
│ │ ├── list.phtml
│ │ └── detail.phtml
│ ├── plugins // 插件目录
│ │ └── Init.php
│ ├── services // 业务逻辑封装
│ │ ├── CommonService.php
│ │ ├── UserService.php
│ ├── tests // 单元测试相关
│ └── views // 单模块的试图目录
│ ├── error
│ │ └── error.phtml
│ └── index
│ ├── index.phtml
│ └── tpl.phtml
├── bin
│ ├── console
│ └── run
├── composer.json
├── composer.lock
├── conf // 配置目录
│ ├── application.ini
│ ├── application.ini.example
│ └── routes.php // 通过bootstrap加载
├── public
│ ├── favicon.ico
│ ├── index.php // 单入口文件
│ └── assets
│ ├── css
│ ├── img
│ └── js
└── storage
├── cache // 缓存目录
└── logs // 日志目录
功能介绍
配置文件
conf/application.ini 是整个框架的配置文件,默认系统的命名是使用驼峰式的。 用户自定义的配置一般也写到这里即可,使用下划线分割。
Bootstrap
1、application目录下有一个总的Bootstrap.php文件,这里可以加载全局需要用到的ORM,Plugins,Composer,Route,Config等等, 此文件是默认存在的。
2、application/modules目录下各个module里也可以定义各自的Bootstrap.php, 在这里可以做一些当前模块的全局处理,比如检查用户是否登录。
路由
分三种路由,其中静态路由是默认路由,也是常用路由模式,如果需要其他特殊处理可以使用正则或Rewrite模式。
静态路由(默认)
简单(Simple)路由
Supervar路由
Map路由
Rewrite路由
正则(Regex)路由
Demo:
/**
* 路由
*
* File: routes.php
*/
return [
// 正则路由
'news' => [
'type' => 'regex',
'match' => '/news\/([\d]+)/',
'route' => [
'module' => 'Home',
'controller' => 'News',
'action' => 'detail',
],
'map' => [ //参数
'1' => 'id',
],
],
// rewrite路由
'news' => [
'type' => 'rewrite',
'match' => 'news/:id/',
'route' => [
'module' => 'Home',
'controller' => 'News',
'action' => 'detail',
],
],
// 或
'news' => [
'type' => 'rewrite',
'match' => 'resource/:c/:a/:id/',
'route' => [
'module' => 'Home',
'controller' => 'news',
'action' => 'detail',
],
],
];
控制器 Controller
命名规则: 第一个字母大写,紧跟后面的必须小写。class名称同文件名。
错误: LiveStream.php
正确: Livestream.php
同时支持JSONP返回,只需要在get url时传入 _callback即可。
ORM
集成 Laravel的Eloquent的ORM, Eloquent 比较强大也比较好用,玩够一个足矣。 详细介绍
视图
默认在application/views下, 如果是多模块则放到对应的modules下的views里。 也可以通过Composer加载 Laravel的Blade或者 Symfony的Twig模板引擎, 当然需要在Bootstrap里初始化加载一下
校验
目前供支持10种格式校验
required
match
url
compare
length
in
number
mobile
date
$checkRules = [
['uid,group_id', 'required'],
['phone', 'match', 'pattern' => '/^1[34578]\d{9}[\d,]*$/', 'allowEmpty' => false],
['email', 'email', 'allowEmpty' => false],
['url', 'url', 'allowEmpty' => false],
['repassword', 'compare', 'target' => 'password', 'allowEmpty' => false],
['username', 'length', 'min' => 4, 'max' => 3000, 'allowEmpty' => false],
['status', 'in', 'range' => [0, 1], 'allowEmpty' => false],
['uid,group_id', 'number', 'min' => 1],
['phone', 'mobile', 'range' => [0, 1], 'allowEmpty' => false],
['birthday', 'date', 'format' => 'Y-m-d', 'allowEmpty' => false]
];
$needCheckArr = [
'email' => $email
];
if (Validator::validator($needCheckArr, $checkRules) !== true) {
throw new \Exception('param error', Code::PARAMS_ERROR);
}
自动加载
可以加载本地类库,默认在application/library里, 也可以在conf/application.ini或php.ini的yaf配置里指定。
插件
可以自己写一些插件来满足业务需要, 最后通过application下的Bootstrap.php里的_initPlugin来调用。
脚本
脚本一般放在 application/modules/Console/controllers 目录下, 写法和其他模块里controller的写法一致。
使用:
php bin/run Test/test // Test 控制器下的test action
日志
日志使用比较简单,在需要记录日志的电饭锅加入以下代码:
use Core\Log;
Log::info('日志标识', ['param1' => $param1, 'param2' => $param2,...]);
看后在命令行下可以查看:
tail -f storage/logs/2016-11-29.log
PS: 依赖monolog package
异常和错误
如果配置文件中appliation.dispatcher.throwException 设为1或true,Yaf会抛异常, 否则则会触发错误。 当Yaf遇到未捕获异常的时候, 就会把运行权限, 交给当前模块的Error Controller的Error Action动作, 而异常或作为请求的一个参数, 传递给Error Action. 错误页默认在application/views/error/error.phtml, 可以进行自定义处理。
依赖注入(Dependency injection)
DI 一般通过contructor来注入(依赖注入的一种方式), 补充注入过程
@todo 增加demo
事件管理(EventManager)
@todo 增加demo
单元测试
PHPUnit
命令行工具
php bin/console // 查看可用命令
php bin/console make:controller Articles// 创建控制器
php bin/console make:model Articles // 创建模型
php bin/console make:plugin Test// 创建插件
yaf 中文手册
参考