0

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

2 回答 2

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);
         }
    }
}
于 2017-11-16T15:34:17.030 回答
0

您可以相当轻松地在视图和控制器中的布局之间切换.. 使用插件语法

// inside controller 
  $this ->layout = 'Plugin.layout';

//inside view template
    $this ->layout = 'Plugin.layout';

如果您只想禁用主题,请使用上面的 Mathew 方法。但请注意,这将禁用整个应用程序的主题,而不仅仅是这个插件,以防您的某些应用程序代码在您的插件之后运行

于 2017-11-17T03:55:09.653 回答