Name Last Update
Hood Loading commit data...
README.md Loading commit data...
composer.json Loading commit data...

#Hood

概述

框架命名( Hood )  发动机罩引擎罩来源于Yohood, 框架基于 Yaf 在数据层封装了Dao、Cache、Concurrent、Debug、Server 6个主要模块

框架以简单快捷为目的.

安装

  php版本要求 php 5.4+ 以上版本, 必要模块 Pdo_MySQL、Yaf、Yar
  https://github.com/laruence/php-yaf
  https://github.com/laruence/yar

  Yaf 文档 
  http://php.net/manual/zh/book.yaf.php

配置文件

 1、数据库配置

 [mysql]
 charset = UTF8
 persistent = TRUE
 collation = utf8_unicode_ci
 timeout = 3
 [database]
 erp_admin.username = root
 erp_admin.passwd = root
 erp_admin.write = 127.0.0.1:3306
 erp_admin.read = 192.168.1.106:3306
 erp_admin.dbname = erp_admin

 hood.username = root
 hood.passwd = root
 hood.write = 127.0.0.1:3306
 hood.read = 192.168.1.106:3306

 hood2.username = root
 hood2.passwd = root
 hood2.write = 127.0.0.2:3306
 hood2.read = 192.168.2.106:3306



 2、缓存配置
 [memcached]
 servers.hosts = 127.0.0.1:11211:90,127.0.0.1:11212:10
 erp.hosts = 127.0.0.1:11211:90,127.0.0.1:11212:106
 [redis]
 servers.hosts = 127.0.0.1:6379

Dao

Dao 提供主要如下方法

1、数据操作
  insert、delete、update

  2、查询数据
  fetchAll、fetchRow、fetchPairs、fetchOne、fetchColumn、fetchObject、fetchClassRow、fetchClass、fetchAssoc、

  3、其他设置
  setModality        设置读写服务器
  cache                 缓存设置
  tag                      缓存标签
  key                      缓存key
  expire                  缓存过期时间

 数据库操作借鉴Java的 mybatis 把SQL已配置文件形式存储
 class SqlMap
 {
     const INSERT_DEMO = 'insert into demo (`username`,`email`) values (:username,:email)';
     const UPDATA_DEMO_BY_ID = 'update demo set `username`=:username,`email`=:email where `id`=:id';
     const SELECT_DEMO_BY_ID = 'select * from `demo` where id=:id';
 }

     Insert 
 $this->dao()->insert(SqlMap::INSERT_DEMO, array(
     'username' => $username,
     'email' => $email
 ))->lastInsertId();

      setModality(设置读写模式)
 $this->dao()->setModality('read')->insert(SqlMap::INSERT_DEMO, array(
     'username' => $username,
     'email' => $email
 ))->lastInsertId();

     update
 $this->dao()->tag('demo_' . $id)->update(SqlMap::UPDATA_DEMO_BY_ID, array(
     'username' => $username,
     'email' => $email,
     'id' => $id
 ))->rowCount();

 fetchClassRow
 $this->dao()->tag('demo_' . $id)->key('demo_row')->expire(300)->setFetchClass('Models\Hood\Demo\Form')
 ->fetchClassRow(SqlMap::SELECT_DEMO_BY_ID, array( 'id' => $id ));

 fetchAssoc
 $this->dao()->tag('demo_' . $id)->key('demo_info')->fetchAssoc(SqlMap::SELECT_DEMO_BY_ID, array('id' => $id));

Cache

 $mc = hoodCache::Memcached($node, $child_node);
 $mc->add($key , $val);
 hoodCache::Memcached()->get($key);
 hoodCache::Redis()->get($key);

Concurrent

1、RPC ( PHP )

1、普通接口数据请求
Concurrent::yarClient($uri)->getDemoInfoByID($id);

2、平行数据请求
Concurrent::yarConcurrent($uri)->calls('getDemoInfoByID', 1,function ($demoData) {
                   xxxx
})->calls('getDemoInfoByID', 2,function ($demoData) {
                   xxxxx
})->loop();

2、CURL Concurrent

```php
    use Hood\Concurrent;
    $CurlMulti = Concurrent::curlMulti();
    $CurlMulti->get('http://www.baidu.com',function ($curl_data,$curl_info) {
        print_r($curl_info);
    }, 1)->post('http://www.sogou.com',function ($curl_data,$curl_info) {
        print_r($curl_info);
    }, 2)->finish();


    $CurlMulti = Concurrent::curlMulti();
    $CurlMulti->callRest('http://www.qin.com/index/demo', 'get', function ($curl_data,$curl_info) {
        print_r($curl_data);
    }, array('a' => 1))->finish();
```

Debug

Transaction

数据库事务启用 1、Closure闭包调用

(new Transaction)->transaction(function(){
    $ret1 = SiteClient::self()->add('trantestUrl_'.  uniqid(true),'trantestName_'.  uniqid(true));var_dump($ret);
    $ret2 = UserClient::self()->add('trantestUrl_'.  uniqid(true),'trantestName_'.  uniqid(true));var_dump($ret);
    if (!$ret1 || !$ret2){
        throw new Exception('123');
    }
});

2、静态启用

Transaction::beginTransaction();
    $ret1 = SiteClient::self()->add('trantestUrl_'.  uniqid(true),'trantestName_'.  uniqid(true));var_dump($ret);
    $ret2 = BrandClient::self()->add('trantestUrl_'.  uniqid(true),'trantestName_'.  uniqid(true));var_dump($ret);
    $ret3 = UserClient::self()->add('trantestUrl_'.  uniqid(true),'trantestName_'.  uniqid(true));var_dump($ret);
    if (!$ret1 || !$ret2 || !$ret3){
        Transaction::rollback();
    }else{
        Transaction::commit();
}