强制CakePHP插件使用自己的布局

时间:2017-11-16 06:40:46

标签: cakephp cakephp-3.4

我写了一个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
}

2 个答案:

答案 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方法。但要小心,这将禁用整个应用程序的主题,而不仅仅是这个插件,以防你的一些应用程序代码在你的插件后运行