其实很早之前就接触yaf了,但只是学习学习,没有深入的去了解和使用,但由于最近在重构一个项目,而重构所用到的框架就是yaf框架,正好趁此机会好好地使用了下yaf框架。本篇文章其实主要给一个yaf的例子,就是扩展了下yaf,因为yaf的东西本身就简单,所以快。鸟哥也给了两个例子,laruence/yaf-examples,一个是在yaf里使用Smarty的例子,还有一个是在yaf里加了DB和Log操作的包的例子。我给的yaf例子地址是:https://github.com/jsyzchen/chen-yaf

配置

extension=yaf.so

yaf.use_namespace=1 ;开启命名空间

yaf.use_spl_autoload=1 ;开启自动加载

先编辑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层,或者直接使用第三方包,推荐Medoo和Eloquent ORM,chen-yaf里面是使用的Eloquent ORM。

编辑Bootstrap.php文件,添加_initDefaultDbAdapter方法

/**

* 初始化数据库分发器

* @function _initDefaultDbAdapter

* @author jsyzchenchen@gmail.com

*/

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

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class EloquentModel extends Model

{

}

然后所有的Model类都继承EloquentModel,这样就可以像在Laravel里操作数据库了,另外DB也是能使用的,和Laravel里的DB facade使用方法一样。文档:https://learnku.com/docs/laravel/5.1/eloqu... , https://learnku.com/docs/laravel/5.1/datab...

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:日志的操作。

本作品采用《CC 协议》,转载必须注明作者和本文链接

JsyzChen

php yaf twig,yaf-example相关推荐

  1. php yaf 教程,yaf 入门

    一.了解 ·yaf是php框架中性能最好的框架,因为它是用c语言以扩展方式实现的,其框架类.配置常驻内存. ·相较原生php的类,经过ab测试,性能损失仅约10%. ·支持自定义视图解析.路由,且拥有 ...

  2. php yaf 安装,Yaf安装与部署

    Yaf安装与部署 Yaf安装与部署 Yaf框架是基于扩展的mvc框架,用c实现的,因此性能效率都比一般的框架要高. github地址:github.com/laruence/php-yaf ### 一 ...

  3. php yaf 教程,Yaf教程2:入门使用

    接下来我们通过最简单的"hello yaf"例子说明 Yaf 的用法,然后一步步走向更加复杂的用法.Yaf的PHP官方手册位置是:http://php.net/manual/zh/ ...

  4. php yaf smarty,Yaf 结合用户自定义的视图(模板)引擎Smarty(Yaf + Smarty)

    Yaf 结合用户自定义的视图(模板)引擎Smarty(Yaf + Smarty) 来源:互联网 作者:佚名 时间:2015-08-06 07:55 对完成某个任务进行计时可使用progress_tim ...

  5. php swoole yaf,swoole+yaf 实现定时执行任务

    在开发过程中,经常需要有每隔多少分钟就执行一次任务的需求,本文讲的就是在yaf下使用命令行的形式(cli模式)定时运行脚本文件,换而言之就是在cli模式下运行模块控制器的方法.例如在linux环境下通 ...

  6. php xampp 安装yaf,在apache中,yaf访问yaf,apache会异常退出是为何?

    Apache 没有任何日志信息,我换了xampp出现Apache崩溃了,Windows提示程序已经停止运行 Windows记录的日志信息: 日志名称: Application 来源: Applicat ...

  7. php yaf 模板引擎,yaf-example

    其实很早之前就接触yaf了,但只是学习学习,没有深入的去了解和使用,但由于最近在重构一个项目,而重构所用到的框架就是yaf框架,正好趁此机会好好地使用了下yaf框架.本篇文章其实主要给一个yaf的例子 ...

  8. linux 卸载yaf,LINUX操作系统怎么搭建YAF框架

    如何在已经搭建好的php环境下,继续搭建yaf框架环境?那么小编就在本文给大家介绍下搭建方法 LINUX操作系统怎么搭建YAF框架 命令: wget 地址参考图片 命令: tar zxvf yaf-2 ...

  9. PHP安装加载yaf扩展

    Yaf,全称 Yet Another Framework,是一个C语言编写的PHP框架,是一个用PHP扩展形式提供的PHP开发框架, 相比于一般的PHP框架, 它更快. 它提供了Bootstrap, ...

最新文章

  1. 主流手机OS与鸿蒙OS
  2. 【WEB安全】flask不出网回显方式
  3. InvokeHelper:多线程修改主界面控件属性并调用其中方法
  4. php 7.2.5_CentOS7下PHP5.5.38升级PHP7.2.2
  5. java实现icmp攻击,利用java实现ICMP协议在linux环境配置
  6. java代理模式与装饰者模式
  7. 链栈判断回文 java_C语言链栈判断回文
  8. 北京互联网人寒冬求职记
  9. 拓端tecdat:Python主题建模LDA模型、t-SNE 降维聚类、词云可视化文本挖掘新闻组数据集
  10. 终于把所有的Python库,都整理出来啦!
  11. stm32芯片超时无应答解决
  12. bu zhi dao yao zen me zuo
  13. Python-day17
  14. 计算语言学之句法理论(1)
  15. 谁在签收您的信用卡挂号信
  16. 线上宠物销售系统的设计与实现
  17. 全面了解超声波传感器
  18. python合并word表格单元格_Python实战009:读取Word文档中的表格数据及表格合并问题解决...
  19. 第三章 python基础
  20. bugFree环境搭建 及 bugFree环境搭建常见问题

热门文章

  1. C++中,float double区别
  2. PTA-7-8 删除重复字符 (20分)(C语言)
  3. 比较交换/(选择)排序法和冒泡排序法(C语言)
  4. pg多线程更新会发生死锁_[C#.NET 拾遗补漏]12:死锁和活锁的发生及避免
  5. 信息学奥赛一本通 2025:【例4.11】体操队
  6. Small Multiple(AtCoder-3621)
  7. 搭配购买(信息学奥赛一本通-T1387)
  8. mysql insert id的参数_Mysql----MySQL的mysql_insert_id和LAST_INSERT_ID(转)
  9. 晶体(crystal、无源晶振)两端电容取值计算
  10. CNN是不是一种局部self-attention?