Filter缓存依赖

在分页查询的时候可以指定是否从缓存中获取数据,框架中开始设定的是ajax不走缓存,而非ajax才走缓存,这样做在后期做复杂业务的时候会有一定的局限性,所以编写了过滤器缓存依赖,用来指定根据提交的数据而进行自动判断是否从缓存中后期query数据。

<?php
namespace common\caching;

use yii\caching\Dependency;
use common\base\Filter;

/**
 * Filter缓存依赖,根据指定的“get”、“post”、“request”的值,到提交的数据中进行查询返回对应的值,如果请求的数据发生变化则缓存失效
 *
 * @author niqingyang <niqy@qq.com>
 *        
 */
class FilterDependency extends Dependency
{

	public $post = [];

	public $request = [];

	public $get = [];

	public $defaults = [];

	protected function generateDependencyData ($cache)
	{
		$data = [];
		foreach((array)$this->get as $name)
		{
			$data[$name] = Filter::get($name, $this->defaults[$name]);
		}
		foreach((array)$this->post as $name)
		{
			$data[$name] = Filter::post($name, $this->defaults[$name]);
		}
		foreach((array)$this->request as $name)
		{
			$data[$name] = Filter::request($name, $this->defaults[$name]);
		}
		return $data;
	}
}

 可以用在pageList函数中:

/**
	 * 获取商品分页列表
	 *
	 * @param string $read_cache        	
	 * @param array $params        	
	 */
	public static function pageList ($read_cache = false, $params = [], Dependency $dependency = null)
	{
		// 分页设置
		$filter = Filter::getInstance($read_cache);
		
		if(isset($filter->query) && $filter->query instanceof Query)
		{
			$filter->page($filter->query);
			return $filter;
		}
		
		$defaults = [
			'shop_id' => null, 
			'goods_status' => null, 
			'goods_audit' => null
		];
		
		$params = ArrayHelper::merge($defaults, $params);
		
		$query = new Query();
		$query->select('*')->from(static::tableName())->orderBy([
			'goods_id' => 'desc'
		]);
		
		// 状态
		if(($goods_status = Filter::get('goods_status', $params['goods_status'])) !== null)
		{
			$query->andWhere([
				'goods_status' => $goods_status
			]);
		}
		
		// 加上缓存依赖
		// 此处根据查询条件进行判断是否需要从缓存中读取数据
		// 一旦指定的查询条件发生变化,则刷新缓存
		$filter->page($query, new FilterDependency([
			'get' => 'goods_status'
		]));
		
		return $filter;
	}

 通过下面的代码指定了,获取fitler的条件,一旦get提交的goods_status值发生变化则自动刷新缓存,这样无论是ajax还是非ajax都可以默认从缓存中读取数据了

// 加上缓存依赖
		// 此处根据查询条件进行判断是否需要从缓存中读取数据
		// 一旦指定的查询条件发生变化,则刷新缓存
		$filter->page($query, new FilterDependency([
			'get' => 'goods_status'
		]));

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值