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 中文手冊

參考

相關文章
相關標籤/搜索