yaf-example

NO IMAGE
1 Star2 Stars3 Stars4 Stars5 Stars 給文章打分!
Loading...

yaf是鳥哥用C語言編寫的一個PHP框架,yaf文件地址:http://yaf.laruence.com/manual/

其實很早之前就接觸yaf了,但只是學習學習,沒有深入的去了解和使用,但由於最近在重構一個專案,而重構所用到的框架就是yaf框架,正好趁此機會好好地使用了下yaf框架。本篇文章其實主要給一個yaf的例子,就是擴充套件了下yaf,因為yaf的東西本身就簡單,所以快。鳥哥也給了兩個例子,laruence/yaf-examples,一個是在yaf裡使用Smarty的例子,還有一個是在yaf里加了DB和Log操作的包的例子。我給的yaf例子地址是:https://github.com/jsyzchen/chen-yaf

配置

首先,你得安裝yaf,文件裡有,http://php.net/manual/zh/yaf.installation.php
安裝完之後,編輯php.ini檔案,配置yaf:

extension=yaf.so
yaf.use_namespace=1 ;開啟名稱空間
yaf.use_spl_autoload=1 ;開啟自動載入

chen-yaf主要新增了:

Eloquent ORM

Twig

羅飛的SocketLog

一些常用函式

先編輯conf/application.ini檔案

[common]
application.directory = APP_PATH  "/application"
application.view.ext = "html"
application.view.engine = "twig"
;user
user.default_filter = 'trim,addslashes,htmlspecialchars'
[product : common]
;twig
twig.cache = APP_PATH "/storage/twig/cache"
;database
database.driver = 'mysql'
database.read.host = '127.0.0.1'
database.write.host = '127.0.0.1'
database.port = '3306'
database.database = 'test'
database.username = 'root'
database.password = '123456'
database.charset = 'utf8'
database.collation = 'utf8_unicode_ci'
database.prefix = ''
database.strict = false
[develop : common]
application.dispatcher.catchException = TRUE
;twig
twig.debug = true
;socketlog
socketlog.enable = true
socketlog.host = 'localhost'
socketlog.optimize = true
socketlog.show_included_files = true
socketlog.error_handler = true
socketlog.force_client_ids = ''
socketlog.allow_client_ids = 'slog_78de03'
;database
database.driver = 'mysql'
database.host = '127.0.0.1'
database.port = '3306'
database.database = 'test'
database.username = 'root'
database.password = '123456'
database.charset = 'utf8'
database.collation = 'utf8_unicode_ci'
database.prefix = ''
database.strict = false

database為MySql資料庫的配置,socketlog為socketlog的配置,twig為twig模板引擎的配置

因為chen-yaf使用的是composer包,首先你得安裝composer,然後在專案目錄下建一個composer.json檔案,內容如下:

{
"require": {
"php": ">=5.5.9",
"illuminate/database": "5.1.*",
"illuminate/events": "5.1.*",
"symfony/debug": "2.6.*",
"symfony/var-dumper": "2.6.*",
"twig/twig": "^1.26"
},
"autoload": {
"psr-4": {
"App\\Models\\": "application/models"
}
}
}

然後記得

composer install  

編輯Bootstrap.php檔案

/**
* 載入vendor下的檔案
*/
public function _initLoader()
{
\Yaf\Loader::import(APP_PATH . '/vendor/autoload.php');
}
/**
* 配置
*/
public function _initConfig()
{
$this->config = \Yaf\Application::app()->getConfig();//把配置儲存起來
\Yaf\Registry::set('config', $this->config);
}

Eloquent ORM

Eloquent ORM是Laravel框架裡的ORM。

yaf裡是沒有資料庫操作類的,可以自己寫一個DAO層,或者直接使用第三方包,推薦MedooEloquent ORM,chen-yaf裡面是使用的Eloquent ORM
編輯Bootstrap.php檔案,新增_initDefaultDbAdapter方法

/**
* 初始化資料庫分發器
* @function _initDefaultDbAdapter
* @author   [email protected]
*/
public function _initDefaultDbAdapter()
{
//初始化 illuminate/database
$capsule = new \Illuminate\Database\Capsule\Manager;
$capsule->addConnection($this->config->database->toArray());
$capsule->setEventDispatcher(new \Illuminate\Events\Dispatcher(new \Illuminate\Container\Container));
$capsule->setAsGlobal();
//開啟Eloquent ORM
$capsule->bootEloquent();
class_alias('\Illuminate\Database\Capsule\Manager', 'DB');
}

然後在application/model下建一個Model基類,EloquentModel.php

<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class EloquentModel extends Model
{
}

然後所有的Model類都繼承EloquentModel,這樣就可以像在Laravel裡運算元據庫了,另外DB也是能使用的,和Laravel裡的DB facade使用方法一樣。文件:https://laravel-china.org/docs/5.1/eloquent , https://laravel-china.org/docs/5.1/database

twig

twig是Symfony框架裡的模板引擎,當然它也可以單獨使用。模板引擎也可以使用Smarty,如果你想擁有頁面快取的功能,請用Smarty。

編輯Bootstrap.php檔案,新增_initTwig方法

/**
* Twig View
* @param \Yaf\Dispatcher $dispatcher
*/
public function _initTwig(\Yaf\Dispatcher $dispatcher)
{
$twig = new \Twig\Adapter(APP_PATH . "/application/views/", $this->config->get("twig")->toArray());
$dispatcher->setView($twig);
}

這樣就可以在html檔案裡使用twig模板引擎了

SocketLog

SocketLog是ThinkPHP框架核心開發者“羅飛”開發的一個除錯的工具,使用過ThinkPHP5框架的應該很熟悉。更多的介紹可以閱讀我的另一篇文章:日誌服務

我把SocketLog相關的檔案放在library/Common/Logger目錄下了,當你安裝完SocketLog並配置好,在Bootstrap.php新增_initLogger方法。

/**
* 日誌
* @param \Yaf\Dispatcher $dispatcher
*/
public function _initLogger(\Yaf\Dispatcher $dispatcher)
{
//SocketLog
if (Yaf\ENVIRON === 'develop') {
if ($this->config->socketlog->enable) {
//載入
\Yaf\Loader::import('Common/Logger/slog.function.php');
//配置SocketLog
slog($this->config->socketlog->toArray(),'config');
}
}
}

然後就可以在Chrome裡除錯你的程式碼了。

其他

chen-yaf引入了一些函式,放在library/Common/functions.php裡了,都是一些常用的函式,如果你的專案中有其他的函式往裡面加就行了。編輯Bootstrap.php,新增_initFunction方法。

/**
* 公用函式載入
*/
public function _initFunction()
{
\Yaf\Loader::import('Common/functions.php');
}

總結

chen-yaf只是一個很簡單的yaf例子,加了Eloquent ORM和twig。實際專案中,還需要不斷地往裡面新增東西。既然我們使用了composer包,那麼我們在做自己的專案時就可以很方便的使用第三方包,避免我們重複造輪子。
推薦一些第三方包吧,也是我們在重構專案裡所用到的。
1.carbon:對於時間日期的操作。
2.php-resque:佇列的操作。
3.sokil/php-mongo:mongodb的操作。
4.monolog:日誌的操作。

為了更好的交流,可以加QQ群:415183844

碼字不容易,轉載請註明原地址,Jsyz Chen的部落格:http://jsyzchen.com/2016/10/22/yaf-example/ 謝謝!

相關文章

程式語言 最新文章