到目前为止,我已经能够在我自己的插件中通过添加和别名父任务来覆盖ControllerTask
,ModelTask
和TemplateTask
。
namespace WetKit\Shell\Task;
...
use Bake\Shell\Task\ModelTask as WetKitModelTask;
class ModelTask extends WetKitModelTask
{...}
但是,当我尝试将相同的逻辑应用于位于plugin/WetKit/src/View/Helper
中的BakeHelper.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)
{...}
}
如果我把文件放在vendor文件夹下,这将起作用。
1条答案
按热度按时间kulphzqa1#
助手不能像任务一样被“覆盖”,因为它们的加载方式完全不同。任务被收集在一个列表中,如果它们使用相同的名称,在稍后收集的任务可以替换列表中的现有条目。
Helper通过CakePHP的默认helper加载功能加载,例如
loadeHelper()
,特别是使用一个解析为完全限定类名的短名称,它不能被替换。除非确实要覆盖任何烘焙辅助对象功能,否则实际上没有理由不使用单独的辅助对象,可以在
Bake.initialize
事件中加载该辅助对象:然后,可以在烘焙分支模板中使用辅助对象,如
CustomBake.isBilingualTable(...)
。为了完成,如果确实需要覆盖烘焙辅助对象,则必须首先卸载现有辅助对象,然后加载您的辅助对象:
另请参阅