【问题标题】:Cannot override BakeHelper using my plugin无法使用我的插件覆盖 BakeHelper
【发布时间】:2021-12-03 22:53:56
【问题描述】:

到目前为止,我已经能够在我自己的插件中通过添加父任务和别名来覆盖ControllerTaskModelTaskTemplateTask。使用ModelTask 的示例。

namespace WetKit\Shell\Task;
...
use Bake\Shell\Task\ModelTask as WetKitModelTask;

class ModelTask extends WetKitModelTask
{...}

但是,当我尝试将相同的逻辑应用于位于 plugin/WetKit/src/View/HelperBakeHelper.php 时,它不起作用并且找不到功能:

me@laptop MINGW64 ~/Downloads/xampp3/xampp/htdocs/twofk (master)
$ bin/cake bake controller dummy_lists -t WetKit
*** WetKit Controller Task! ***

Baking controller class for DummyLists...
Warning Error: Method Bake\View\Helper\BakeHelper::isBilingualTable does not exist in [C:\Users\me\Downloads\xampp3\xampp\htdocs\twofk\vendor\cakephp\cakephp\src\View\Helper.php, line 116]

这是我自定义的BakeHelper 类定义:

namespace WetKit\View\Helper;
...
use Bake\View\Helper as WetKitHelper;

/**
 * Bake helper
 */
class BakeHelper extends WetKitHelper
{
    ...

    public function isBilingualTable($table)
       {...}
}

如果我将文件放在供应商文件夹下,这将起作用。

【问题讨论】:

    标签: php cakephp cakephp-3.0


    【解决方案1】:

    助手不能像任务一样被“覆盖”,因为它们的加载方式完全不同。任务正在列表中收集,稍后收集的任务可以替换列表中的现有条目,以防它们使用相同的名称。

    帮助程序通过 CakePHP 的默认帮助程序加载功能加载,例如 loadeHelper(),特别是使用解析为完全限定类名的短名称,无法替换。

    除非您真的想要覆盖任何烘焙助手功能,否则没有理由不使用单独的助手,您可以在 Bake.initialize 事件中加载它:

    // in your plugin's bootstrap
    
    \Cake\Event\EventManager::instance()
        ->on('Bake.initialize', function (\Cake\Event\EventInterface $event) {
            /** @var \Cake\View\View $view */
            $view = $event->getSubject();
    
            // load `\WetKit\View\Helper\CustomBakeHelper`
            $view->loadHelper('WetKit.CustomBake');
        });
    

    然后可以像 CustomBake.isBilingualTable(...) 一样在烘焙树枝模板中使用帮助器。

    为了完成,如果你真的需要覆盖烘焙助手,你首先必须卸载现有的,然后再加载你的:

    $view->helpers()->unload('Bake');
    $view->loadHelper('WetKit.Bake');
    

    另见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2018-05-15
      相关资源
      最近更新 更多