【问题标题】:Cakephp 3 Could not load class from PluginCakephp 3 无法从插件加载类
【发布时间】:2015-06-24 10:23:15
【问题描述】:

我已经编写了一个插件来将日志写入数据库。我的文件夹结构如下所示:

plugins/Logging/src/Log/Engine/DatabaseLog

类如下所示:

  <?php

    namespace Logging\Log\Engine;

    use Cake\Log\Engine\BaseLog;
    use Cake\ORM\TableRegistry;

class DatabaseLog extends BaseLog{

private $Model;

public function __construct(array $config = []){
  parent::__construct($config);
}

public function log($level, $message, array $context = []){

//Laden des Models
if(!$context || !array_key_exists('model', $context)){
   $context['model'] = 'SystemLogs';
}
$this->Model = TableRegistry::get($context['model']);

$log_data = [
  'level' => $level,
  'message' => $message
]; 

$entity = $this->Model->newEntity($log_data);
$this->Model->save($entity);

return true;
 }
}
?>

在我的 app.php 中:

'Log' => [
  'debug' => [
      'className' => 'Logging.DatabaseLog',
  ]
],

我需要改变什么才能加载类

谢谢

【问题讨论】:

  • 嘿帕特里克,你能在问题本身中添加具体错误吗?还可以检查缩进 - 它看起来不正常,这会导致它看起来有点乱,人们可能会因此跳过你的问题。
  • 第一眼看起来不错。插件是否已在您的引导程序中加载?
  • 并且路径是在composer autoloader中注册的吗?
  • what I need to change so that the class is loaded 阅读您收到的错误消息,仔细检查您的作曲家设置,并在必要时调试供应商作曲家自动加载文件并转到“我的文件名错误”/“它没有加载那个namespace"/"命名空间与文件不匹配"/etc.

标签: php cakephp logging plugins cakephp-3.0


【解决方案1】:

不知道是否还有人需要这个。但以防万一。

自从我开始使用 cake 3 以来,我已经遇到过几次这种情况了。

但是,只要我将此行添加到我的根 bootstrap.php 的末尾

Plugin::load('[Name_of_Plugin]', ['bootstrap' => false, 'routes' => true]);

它总是有效的。

干杯。

【讨论】:

    【解决方案2】:

    我的错误信息:

    致命错误:在 /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Log/LogEngineRegistry.php:57 中包含消息“无法加载类 DatabaseLog”的未捕获异常“RuntimeException”:57 堆栈跟踪:#0 /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Core/ObjectRegistry.php(86): Cake\Log\LogEngineRegistry->_throwMissingClassError('DatabaseLog', 'Logging') #1 /Users/patrick/ Sites/vz/vendor/cakephp/cakephp/src/Log/Log.php(198): Cake\Core\ObjectRegistry->load('debug', Array) #2 /Users/patrick/Sites/vz/vendor/cakephp /cakephp/src/Log/Log.php(180): Cake\Log\Log::_loadConfig() #3 /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Log/Log.php(346 ): Cake\Log\Log::_init() #4 /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Log/Log.php(448): Cake\Log\Log::write('错误','[RuntimeExcepti...',数组)#5 /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Error/BaseErrorHandler.php(245): Cake\Log\Log::error( '[RuntimeExcepti...') #6 /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Error/BaseError Handler.php(156): Cake\Error\Base in /Users/patrick/Sites/vz/vendor/cakephp/cakephp/src/Log/LogEngineRegistry.php 第 57 行

    如果我正确理解了文档,我不需要 composer.json。 在我的 bootstrap.php 中。

    bootstrap.php:

    Plugin::load('Logging', ['autoload' => true]);
    

    我还没有调整composer.json:

    composer.json:

    "autoload": {
        "psr-4": {
            "App\\": "src",
            "Logging\\": "./plugins/Logging/src"
        }
    },
    

    【讨论】:

    • 这里没有人有想法吗?
    【解决方案3】:

    请阅读官方文档中关于如何从插件自动加载类的部分:

    http://book.cakephp.org/3.0/en/plugins.html#autoloading-plugin-classes

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-29
      • 2022-11-11
      • 2015-02-14
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      相关资源
      最近更新 更多