yaf 基本功能介绍(含经常使用类库)

yaf-skeleton

yaf 基本功能介绍(含经常使用类库)php

安装

composer create-project phpcasts/yaf-skeleton yaf-demo dev-master -vvvcss

加速版:html

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! 了,有兴趣的同窗能够继续看后面的大概介绍。laravel

说明

  • 配置环境 开发环境: yaf.environ = develop , 生产环境: yaf.environ = production
  • 默认状况下 controllers,views,modules,library,models,plugins 是在根 namespace
  • service目录的namespace 是配置在 App\Services 下,需在 composer.jsonautoload下的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 是整个框架的配置文件,默认系统的命名是使用驼峰式的。 用户自定义的配置通常也写到这里便可,使用下划线分割。git

Bootstrap

  • 一、application目录下有一个总的Bootstrap.php文件,这里能够加载全局须要用到的ORM,Plugins,Composer,Route,Config等等, 此文件是默认存在的。
  • 二、application/modules目录下各个module里也能够定义各自的Bootstrap.php, 在这里能够作一些当前模块的全局处理,好比检查用户是否登陆。

路由

分三种路由,其中静态路由是默认路由,也是经常使用路由模式,若是须要其余特殊处理可使用正则或Rewrite模式。github

  • 静态路由(默认)
  • 简单(Simple)路由
  • Supervar路由
  • Map路由
  • Rewrite路由
  • 正则(Regex)路由

Demo:shell

<?php
/**
 * 路由
 *
 * 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名称同文件名。json

错误: LiveStream.php
正确: Livestream.php

同时支持JSONP返回,只须要在get url时传入 _callback便可。bootstrap

ORM

集成 LaravelEloquent的ORM, Eloquent 比较强大也比较好用,玩够一个足矣。 详细介绍

视图

默认在application/views下, 若是是多模块则放到对应的modules下的views里。 也能够经过Composer加载 LaravelBlade或者 SymfonyTwig模板引擎, 固然须要在Bootstrap里初始化加载一下

校验

目前供支持10种格式校验

  • required
  • match
  • email
  • 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 中文手册

参考

相关文章
相关标签/搜索