我写了一个CakePHP插件https://github.com/anuj9196/CakePHP-App-Installer
该插件正在使用default.ctp
plugin_path/src/template/layout/default.ctp
版面
当主机应用程序中使用其他主题时。就像我的情况一样,我在AppController
' s beforeRender()
$this->viewBuilder()->setTheme('DashboardTemplate');
DashboardTemplate
位于应用程序的/plugin/
目录中。
现在,当我使用example.com/installer/install
模板加载在DashboardTemplate
主题之上。
如何在插件的AppController中禁用它们?
AppController
内部插件目录包含
<?php
namespace Installer\Controller;
use App\Controller\AppController as BaseController;
class AppController extends BaseController
{
// nothing here
}
答案 0 :(得分:0)
使用插件beforeRender()
中的AppController
删除主题。
<?php
namespace Installer\Controller;
use App\Controller\AppController as BaseController;
class AppController extends BaseController
{
/**
* @param \Cake\Event\Event $event The beforeRender event.
* @return \Cake\Http\Response|null|void
*/
public function beforeRender(Event $event)
{
try {
return parent::beforeRender($event);
} finally {
$this->viewBuilder()->setTheme(null);
}
}
}
答案 1 :(得分:0)
您可以非常轻松地在视图和控制器之间切换布局..使用插件语法
// inside controller
$this ->layout = 'Plugin.layout';
//inside view template
$this ->layout = 'Plugin.layout';
如果您只想禁用主题,请使用上面的Mathew方法。但要小心,这将禁用整个应用程序的主题,而不仅仅是这个插件,以防你的一些应用程序代码在你的插件后运行