
public function behaviors()
{
$request = Yii::$app->request;
$alias = $request->get('alias');
$id = $request->get('id');
$categoryId = (int)$request->get('c', 0);
$keyword = trim($request->get('k'));
$tag = $request->get('tag');
$page = (int)$request->get('page', 1);
$detect = new MobileDetect();
$isMobile = $detect->isMobile() ? PageElementType::DEVICE_TYPE_MOBILE : PageElementType::DEVICE_TYPE_PC;
$behaviors = [];
// view 页面缓存
if (!empty($alias)) {
$dependency = new DbDependency([
'sql' => 'SELECT updated_at FROM articles WHERE alias = :alias LIMIT 1',
'params' => [':alias' => $alias],
]);
} elseif (!empty($id)) {
$dependency = new DbDependency([
'sql' => 'SELECT updated_at FROM articles WHERE id = :id LIMIT 1',
'params' => [':id' => $id],
]);
} else {
$dependency = null;
}
$behaviors['pageCacheView'] = [
'class' => PageCache::class,
'only' => ['view'],
'duration' => 300,
'variations' => [$id, $alias, $isMobile],
'dependency' => $dependency,
'cache' => 'fileCache',
];
// index 页面缓存,仅当无关键词和标签时启用
if ($keyword === '' && empty($tag)) {
$category = null;
if (!empty($alias) && UrlHelper::isValidAlias($alias)) {
$category = Yii::$app->db->cache(fn() => ArticleCategory::find()
->where(['alias' => $alias, 'status' => CommonArticleCategory::STATUS_NORMAL])
->limit(1)
->one(), 300);
} elseif (!empty($categoryId)) {
$category = Yii::$app->db->cache(fn() => ArticleCategory::find()
->where(['id' => $categoryId, 'status' => CommonArticleCategory::STATUS_NORMAL])
->limit(1)
->one(), 300);
}
if ($category !== null) {
// 有分类筛选,仅依赖该分类的文章更新时间
$indexDependency = new DbDependency([
'sql' => 'SELECT MAX(updated_at) FROM articles WHERE status = 1 AND category_id = :categoryId',
'params' => [':categoryId' => $category->id],
]);
} else {
// 无分类筛选,才依赖全表(不建议再进一步切分,否则复杂度会上升)
$indexDependency = new DbDependency([
'sql' => 'SELECT MAX(updated_at) FROM articles WHERE status = 1',
]);
}
$behaviors['pageCacheIndex'] = [
'class' => PageCache::class,
'only' => ['index'],
'duration' => 300,
'variations' => [
$categoryId,
$alias,
$page,
$isMobile,
],
'dependency' => $indexDependency,
'cache' => 'fileCache',
];
}
return $behaviors;
}
date.timezone = PRC
'components' => [
'db' => [
// ... 其他配置
'on afterOpen' => function($event) {
$event->sender->createCommand("SET time_zone = '+08:00'")->execute();
},
],
],

PHP / Laravel / Yii2 老项目维护与长期技术支持
如果你的 PHP / Laravel / Yii2 项目已经上线,但遇到原开发离职、Bug 长期无人修复、接口不稳定、性能下降、代码难以接手等问题,可以联系我做一次远程技术排查。
适合以下情况:
✅ 老旧 PHP 系统无人维护
✅ Laravel / Yii2 项目 Bug 修复
✅ 后台管理系统小功能迭代
✅ RESTful API 接口排查
✅ MySQL / Redis / Nginx 性能问题
✅ 长期远程兼职维护
可先从一次小问题开始:
✅ 线上报错排查
✅ 接口异常分析
✅ 慢查询与性能瓶颈定位
✅ 代码结构初步评估
✅ 部署环境与日志检查
如需咨询,请联系我,并注明:PHP 维护咨询。
联系方式:
Telegram:@shuijingwan
微信:13980074657
邮箱:shuijingwanwq@gmail.com

发表回复