我正在尝试在cakephp 3.x中动态设置主题。所以我必须检查主题是否存在。如果存在,我将设置否则将获得默认主题。
if($themeNameExist){
$this->viewBuilder()->theme($themeName);
}
但是我没有得到任何功能或方式如何检查主题是否存在?有人可以帮忙吗?
答案 0 :(得分:2)
在CakePHP 3中,主题是插件,因此您可以使用该功能来测试插件是否已加载,例如
use Cake\Core\Plugin;
if (Plugin::loaded($themeName) === true) {
}
另请参阅 API > \Cake\Core\Plugin::loaded()
根据您为什么需要动态检查/设置主题,保留允许的主题名称的白名单可能是明智的,因为允许任意引用插件(不一定必须是主题),可能对某些人来说范围造成安全问题!
$allowedThemes = [
'FooTheme', 'BarTheme', 'BazTheme'
];
if (
in_array($themeName, $allowedThemes) &&
Plugin::loaded($themeName) === true
) {
}
答案 1 :(得分:0)
我找到了一个解决方案,例如我检查过主题文件夹的位置与否。
使用Cake \ Filesystem \ Folder;
$themeName = 'ThemeName';
$Folder = new Folder(ROOT);
if ($Folder->inPath('plugins' . DS.$themeName)) {
$this->viewBuilder()->theme($themeName);
}