【问题标题】:Argument 1 passed to pluginSplit() must be of the type string, array given传递给 pluginSplit() 的参数 1 必须是字符串类型,给定数组
【发布时间】:2022-01-22 12:18:15
【问题描述】:

我目前正在尝试从 3.10.2 迁移到 4.0。我已经阅读了指南,现在正在尝试解决出现的问题。

我发现这个相当神秘。

Argument 1 passed to pluginSplit() must be of the type string, array given, called in C:\path\to\app\vendor\cakephp\cakephp\src\Core\ObjectRegistry.php on line 300

我怀疑这与加载插件有关。我在堆栈跟踪中没有找到对我自己文件的任何引用:

Error in: ROOT\vendor\cakephp\cakephp\src\Core\functions.php, line 89

pluginSplit
CORE\src\Core\ObjectRegistry.php:300
Cake\Core\ObjectRegistry->normalizeArray
CORE\src\View\View.php:1091
Cake\View\View->loadHelpers
CORE\src\View\View.php:350
Cake\View\View->__construct
CORE\src\View\ViewBuilder.php:556
Cake\View\ViewBuilder->build
CORE\src\View\ViewVarsTrait.php:74
Cake\Controller\Controller->createView
CORE\src\Controller\Controller.php:687
Cake\Controller\Controller->render
CORE\src\Controller\Controller.php:530
Cake\Controller\Controller->invokeAction
CORE\src\Controller\ControllerFactory.php:79
Cake\Controller\ControllerFactory->invoke
CORE\src\Http\BaseApplication.php:229
Cake\Http\BaseApplication->handle
CORE\src\Http\Runner.php:77
Cake\Http\Runner->handle
CORE\src\Http\Runner.php:77
Cake\Http\Runner->handle
CORE\src\Http\Middleware\CsrfProtectionMiddleware.php:128
Cake\Http\Middleware\CsrfProtectionMiddleware->process
CORE\src\Http\Runner.php:73
Cake\Http\Runner->handle
CORE\src\Http\Runner.php:58
Cake\Http\Runner->run
CORE\src\Routing\Middleware\RoutingMiddleware.php:166
Cake\Routing\Middleware\RoutingMiddleware->process
CORE\src\Http\Runner.php:73
Cake\Http\Runner->handle
CORE\src\Routing\Middleware\AssetMiddleware.php:68
Cake\Routing\Middleware\AssetMiddleware->process
CORE\src\Http\Runner.php:73
Cake\Http\Runner->handle
CORE\src\Error\Middleware\ErrorHandlerMiddleware.php:119
Cake\Error\Middleware\ErrorHandlerMiddleware->process
CORE\src\Http\Runner.php:73
Cake\Http\Runner->handle
CORE\src\Http\Runner.php:58
Cake\Http\Runner->run
CORE\src\Http\Server.php:90
Cake\Http\Server->run
ROOT\webroot\index.php:40

编辑#1

第 3 行失败:

$this->loadComponent("WetKit.WetKit");
$this->viewBuilder()->setHelpers(['WetKit.Wet']);
$this->viewBuilder()->setHelpers(['Form', ['templates' => 'WetKit.wet_form']]);
$this->viewBuilder()->setTheme('WetKit');

【问题讨论】:

  • 如果您查看堆栈的顶部,它与加载帮助程序有关。检查你在哪里配置助手,可能有一些定义不正确。
  • 取得进展。见编辑#1。我找到了导致问题的线路。我正在使用建议的setHelpers 远离$helpers 配置,看来我没有传递适当的数组结构?

标签: php cakephp cakephp-3.0 cakephp-4.x


【解决方案1】:

你为助手定义选项的方式是错误的,它必须定义为数组键的值,而不是单独的数组条目,否则该数组被传递到解析助手名称的逻辑中,导致在您看到的错误中。

长话短说:

$this->viewBuilder()->setHelpers([
    'Form' => [
        'templates' => 'WetKit.wet_form'
    ],
]);

我觉得缺少一些关于如何通过配置设置/添加助手的文档。你可能想在GitHub 上打开一个问题。

【讨论】:

  • 你的建议奏效了!终于进入了这次迁移!谢谢。此外,我曾尝试将现有的 $helper 结构转换为这种新的做事方式,但显然失败了。我也将这个逻辑应用到了其他的助手,这些助手也是这样格式化的。
猜你喜欢
  • 2021-10-18
  • 2018-03-22
  • 2020-01-06
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2022-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多