akawalko/zfext

库扩展了Zend Framework 1.12的功能。

1.0 2014-08-18 16:40 UTC

This package is auto-updated.

Last update: 2024-09-20 15:14:26 UTC


README

ZFExt是一个扩展Zend Framework 1.12组件的库。因为我有几个基于ZF1的项目,所以我决定与大家分享我的技巧和窍门。

ZFExt_Db_Table

这个类从Zend_Db_Table派生。它提供了一个干净、几乎透明的缓存层。

使用方法

首先,我们需要创建一个从ZFExt_Db_Table继承的类。在这里,我们声明了两个标准方法,get()getAll(),分别用于通过ID从名为users的数据库表中获取记录和获取所有记录。通过传递名为$useCache的参数,我们可以控制何时从数据库检索数据以及何时从缓冲区中检索。

<?php
class Users extends ZFExt_Model_DbTable
{
    protected $_name = 'users';
    protected $_primary = 'user_id';
 
    public function get($id, $useCache = true)
    {
        $select = $this->select()
            ->where('user_id = :user_id');
 
        return $this->loadOne($select, array('user_id' => $id), null, $useCache, __METHOD__);
    }
 
    public function getAll($useCache = true)
    {
        $select = $this->select()
            ->where('is_active = :is_active');
 
        return $this->loadAll($select, array('is_active' => 1), null, $useCache, __METHOD__);
    }
}

现在我们可以初始化我们的类并从数据库中检索一些数据。

<?php
/** Composer Autoloader **/
require 'vendor/autoload.php';

$db = Zend_Db::factory('Pdo_Mysql', array(
    'host'     => '127.0.0.1',
    'username' => 'your_db_user',
    'password' => 'your_db_passord',
    'dbname'   => 'your_db_name'
));
 
$cache = Zend_Cache::factory('Core', 'APC', array(
    'lifetime' => 3600,
    'automatic_serialization' => true,
));
 
$userModel = new Users(array('db' => $db, 'cache' => $cache));
 
$users = $userModel->getAll();

使用$userModel->getAll()检索所有活跃用户,并将结果保存在缓冲区中,标识符为

Users__getAll__a_1__s_9__is_active__i_1

可用方法

  • setCache($cache)
  • getCache()
  • setOptions(array $options)
  • createCacheId($methodName, $methodArguments = array())
  • removeByPartialId($id)
  • loadOne($sql, $bind = array(), $fetchMode = null, $useCache = true, $calleeMethodName = '')
  • loadAll($sql, $bind = array(), $fetchMode = null, $useCache = true, $calleeMethodName = '')
  • _loadFromCacheIfPossible($fetchMethod, array $args)

方法简要描述

setCache() 设置或覆盖缓存对象。此方法在构造函数中内部使用,如果我们传递了一个包含名为cache的索引的关联数组,就像上面的例子一样。

getCache() 返回缓存对象。

setOptions() 设置或覆盖选项。此方法在构造函数中内部使用,如果我们传递了一个关联数组。

createCacheId() 根据两个参数生成描述性缓存ID。此方法在方法loadOne()loadAll()中内部使用。$methodName非常直观。它是强制性的。第二个参数称为$methodArguments,是一个数组,其中包含在查询执行期间将使用的值。

removeByPartialId() 通过部分ID删除缓存条目。这对于从特定模型类中删除条目而不删除所有条目非常有用。

loadOne()loadAll()只是代理方法,提供直观的API(前三个参数与类Zend_Db_Adapter中的方法fetchRow()和fetchAll()的参数相同)。它们内部使用方法_loadFromCacheIfPossible()

让我们看看参数列表。 $sql 可以是原始 SQL 查询或 Zend_Db_Select 对象。 $bind 是一个数组,其中包含在查询执行期间将使用的值。当参数有名称时最佳,因为它将用于生成描述性的缓存 ID。出于相同的原因,最后一个参数 $calleeMethodName 是使用 loadOne () / loadAll () 获取数据的函数的名称。 $fetchMode 控制Zend_Db 返回查询结果的方式。请使用 Zend_Db 类常量 FETCH_ASSOC、FETCH_NUM、FETCH_BOTH、FETCH_COLUMN 和 FETCH_OBJ 指定获取模式。要了解更多信息,请参阅 Zend 的在线文档,章节 Zend_Db_Statement$useCache 是一个布尔标志,用于控制从数据库检索数据还是从缓冲区检索。

_loadFromCacheIfPossible() 由方法 loadOne() & loadAll() 内部使用。它接受两个参数。 $fetchMethod 是一个字符串,可能有两个值:fetchRowfetchAll 分别。它们是用于从数据库(如果缓冲区中没有找到数据)检索数据的类 Zend_Db_Adapter 中的方法名称。 $args 是一个数组,包含传递给方法 loadOne() & loadAll() 的所有参数。