如何在cakephp 3.x中检查主题是否存在,如果不存在则设置默认主题

时间:2016-03-01 08:38:26

标签: cakephp themes cakephp-3.x

我正在尝试在cakephp 3.x中动态设置主题。所以我必须检查主题是否存在。如果存在,我将设置否则将获得默认主题。

if($themeNameExist){
  $this->viewBuilder()->theme($themeName);
}

但是我没有得到任何功能或方式如何检查主题是否存在?有人可以帮忙吗?

2 个答案:

答案 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);
    }