后台标签管理页面 http://kku_laravel.local.gd/admin/game-tags 报错,无法正常访问。
通过MCP浏览器检查发现以下错误:
主要错误:Class "Dcat\Admin\Actions\BatchAction" not found
app/Module/Game/AdminControllers/Actions/BatchActivateTagAction.php:14次要错误:Call to undefined method App\Module\Game\Models\GameTag::getContrastColor()
app/Module/Game/AdminControllers/GameTagController.php:52文件:
app/Module/Game/AdminControllers/Actions/BatchActivateTagAction.phpapp/Module/Game/AdminControllers/Actions/BatchDeactivateTagAction.php修改:
// 修改前
use Dcat\Admin\Actions\BatchAction;
// 修改后
use Dcat\Admin\Grid\BatchAction;
文件:app/Module/Game/AdminControllers/GameTagController.php
修改:
添加正确的use语句:
use App\Module\Game\AdminControllers\Actions\BatchActivateTagAction;
use App\Module\Game\AdminControllers\Actions\BatchDeactivateTagAction;
修改批量操作的使用方式:
// 修改前
$actions->add('批量激活', new \App\Module\Game\AdminControllers\Actions\BatchActivateTagAction());
$actions->add('批量禁用', new \App\Module\Game\AdminControllers\Actions\BatchDeactivateTagAction());
// 修改后
$actions->add(new BatchActivateTagAction());
$actions->add(new BatchDeactivateTagAction());
问题:在display闭包中,$this指向的是模型实例而不是控制器实例
解决方案:将颜色对比度计算逻辑内联到display闭包中
// 修改前
$this->getContrastColor($color)
// 修改后
$hexColor = ltrim($color, '#');
$r = hexdec(substr($hexColor, 0, 2));
$g = hexdec(substr($hexColor, 2, 2));
$b = hexdec(substr($hexColor, 4, 2));
$brightness = ($r * 299 + $g * 587 + $b * 114) / 1000;
$contrastColor = $brightness > 128 ? '#000000' : '#ffffff';
app/Module/Game/AdminControllers/Actions/BatchActivateTagAction.phpapp/Module/Game/AdminControllers/Actions/BatchDeactivateTagAction.phpapp/Module/Game/AdminControllers/GameTagController.phpDcat\Admin\Actions\BatchAction - 错误的基类Dcat\Admin\Grid\BatchAction - 正确的基类在Grid的display闭包中:
$this 指向当前行的模型实例成功修复了标签管理页面的所有错误,包括:
页面现在可以正常访问,所有功能都工作正常。