yaf没有自带的orm,所以必须自己集成orm。今天我就介绍自己喜欢的wedoo数据库操作类
目前使用的版本是0.9.8.3  yaf目录

1.修改public/index.php,在第一句写上

static $_db = NULL;//数据库静态变量

2.修改配置文件conf/application.ini

application.library = APP_PATH “/library”

;数据库加载
database.database_type = “mysql”
database.database_name = “yourdb”
database.server = “localhost”
database.username = “root”
database.password = “”
database.charset = “utf8”
database.port = 3306

数据库连接部分

3.修改library/medoo.php

use Yaf\Bootstrap_Abstract;
class medoo extends Bootstrap_Abstract
{
…. 省略
}

这里是继承Bootstrap_Abstract;

在构造方法中使用

public function __construct($options = null)
{
global $_db;//静态db
$dbConfig=\Yaf\Registry::get(“config”)->database->toarray();
$dbConfig[‘option’]=array(PDO::ATTR_CASE => PDO::CASE_NATURAL);
$options = $dbConfig;
。。。。省略N行
//以上是连接数据库的,这就是为什么要继承Bootstrap_Abstract的原因
//然后把$this->pdo = new PDO($dsn, $this->username, $this->password, $this->option);改成
if(!$_db){
$_db=$this->pdo = new PDO($dsn, $this->username, $this->password, $this->option);
}else{
$this->pdo=$_db;
}

}

配置完毕。这里解释一下为什么要用$_db。简单来说就是单例模式。

使用medoo类。我们可以在模型中这样用 Application/models/SampleModel.php

<?php
class SampleModel extends medoo{

private $_table=’mytable’;

public function show(){
$list=$this->select($this->_table,’*’, array(
‘LIMIT’=>5
));
return $list;
}
}

?>

在Application/controllers/Index.php 这样用
<?php
use Yaf\Controller_Abstract;
class IndexController extends Controller_Abstract {
public function indexAction(){
header(‘content-type:text/html;charset=utf-8’);
$model = new SampleModel();//第一次new
echo ‘<pre>’;
print_r($model->show());
echo ‘</pre>’;
$mo = new SampleModel();//第二次new
}
}
?>

用static $_db 实现单例模式,无论你new多少次模型,数据库只连接一次

装了phpstudy,为了方便启动 自己写了个bat内容是这样的

@ECHO OFF
echo 正在停止Nginx进程……
nginx\Process -k nginx.exe
nginx\Process -k nginx.exe
echo 正在停止PHP(FastCGI)进程……
nginx\Process -k php-cgi.exe
nginx\Process -k mysqld.exe
echo 正在启动Redis进程…..
nginx\Process -k redis-server.exe

echo 正在启动php(FastCGI)进程……
php540\RunHiddenConsole.exe  php540\php-cgi.exe -b 127.0.0.1:9000 -c php540\php.ini
echo .
echo .
php540\RunHiddenConsole.exe  php540\php-cgi.exe -b 127.0.0.1:9000 -c php540\php.ini
echo .
echo .
php540\RunHiddenConsole.exe  php540\php-cgi.exe -b 127.0.0.1:9000 -c php540\php.ini

echo 正在启动MySQL进程……
php540\RunHiddenConsole.exe  mysql\bin\mysqld.exe
echo .
echo .

echo 正在启动Nginx进程……
cd nginx
RunHiddenConsole.exe nginx.exe
echo .
echo .

REM 启动redis
echo 正在启动Redis进程……
cd ..\redis
RunHiddenConsole.exe redis-server.exe redis.conf
echo .
echo .

exit

 

其中php540是我在网上现在的php5.4.0ts版的,ps 一件包可以随意升级的php

另外有两个软件  process 和 RunHiddenConsole.exe 在这里下载nginx

然后放到nginx目录下  并且拷贝一份RunHiddenConsole.exe 到php540目录下

每次开机就启动这个bat是没有问题的。但是有时候打开其他软件php就起不来了。因为php用的是9000端口。我怀疑是此端口被占用了  用cmd查看端口命令   netstat -aon|findstr “9000”

TCP    0.0.0.0:9000           0.0.0.0:0              LISTENING       18204
TCP    [::]:9000                   [::]:0                     LISTENING       18204

可以看到9000端口被pid为18204的软件占用。

用任务管理器看到pid为eclipse占用。然后关闭eclipse 再先启动此bat  再打开eclipse就没问题了

 

1.Yaf安装  点击查看

2.zend studio 或者 eclipse 支持yaf智能提示 代码补全功能

创建临时目录 php-doc
cd php-doc
svn checkout https://svn.php.net/repository/phpdoc/modules/doc-en ./phpdoc-en
等待读取完成后,上传 auto.php 至当前目录
php auto.php phpdoc-en/en
生成 php5.3 文件夹,其中便是扩展文档。如果是php的其他版本会生成php5目录
复制需要的并加入至ZendStudio(eclipse)的PHP Libraries 即解决问题

PS:auto.php下载

3.添加智能提示图解请看本站phalcon

Thinkphp版本3.2.3 环境LNMP 测试URL  /Admin/Message/index/p/3.html  这个是一个分页 Admin模块下

thinkphp用U方法在windows上正常。win8.1 nginx 1.6

但是在window上却显示/Admin/Message/Admin/Message/index/p/3.html

明显多了个/Admin/Message  查看源代码  里面用了个U方法  然后一点一点的查找U的源代码

发现一个服务器中 PHP 魔术变量__APP__ 在window中解析为”” 而linux解析为 /Admin/Message

好了,我们找到了问题的根源了。解决版本就很简单了

我们在入口文件中加上这样一句代码就可以了

define(__APP__ , ”);//防止linux  nginx  解析问题

总结,在我们遇到程序问题时。我们一定要读取源码,然后一点一点的分析各个变量  建议你用 print_r

测试环境运行很OK,但是放到线上就偶尔出现502错误。

Nginx 502 Bad Gateway的含义是请求的CGI已经执行,但是由于某种原因没有执行完毕而导致CGI进程终止。

Nginx 504 Gateway Time-out的含义是所请求的网关没有请求到,简单来说就是没有请求到可以执行的CGI。

我们这边应该都是部分耗时操作引起了超时,因此需要增大NG的超时时间。
NG的http节
fastcgi_connect_timeout 1800;
fastcgi_send_timeout 1800;
fastcgi_read_timeout 1800;
fastcgi_buffer_size 1024k;
fastcgi_buffers 32 1024k;
fastcgi_busy_buffers_size 2048k;
fastcgi_temp_file_write_size 2048k;

相应的默认参数
fastcgi_connect_timeout 300;
fastcgi_send_timeout 300;
fastcgi_read_timeout 300;
fastcgi_buffer_size 64k;
fastcgi_buffers 4 64k;
fastcgi_busy_buffers_size 128k;
fastcgi_temp_file_write_size 128k;