【问题标题】:Composer Custom package - class not found - PSR4Composer 自定义包 - 找不到类 - PSR4
【发布时间】:2023-01-24 21:13:57
【问题描述】:

我正在尝试开发自己的自定义 Laravel PHP 包并将其发布在作曲家中。在我的包裹composer.json 我有这个:

    "autoload": {
        "psr-4": {
            "Oliverbj\\Cord\\": "src",
            "Oliverbj\\Cord\\Database\\Factories\\": "database/factories"
        }
    },

结构是:

src
 - Cord.php

在 Cord.php 文件中:

namespace Oliverbj\Cord;

然后我使用 composer 安装包:

composer require oliverbj/cord

在我的应用程序中,我尝试这样使用它:

use Oliverbj\Cord;

但我收到此错误:

找不到类“Oliverbj\Cord”

这是我的CordServiceProvider.php

public function configurePackage(Package $package): void
{
    /*
        * This class is a Package Service Provider
        *
        * More info: https://github.com/spatie/laravel-package-tools
        */
    $package
        ->name('cord')
        ->hasConfigFile()
        ->hasViews()
        ->hasMigration('create_cord_table')
        ->hasCommand(CordCommand::class);
}

public function packageRegistered()
{
    $this->app->singleton('cord', function () {
        return new Cord();
    });
}

【问题讨论】:

  • use Oliverbj\Cord\Cord;
  • 如果我那样使用它,我就不能调用像“Cord::myMethod()”这样的方法:Non-static method Oliverbj\Cord\Cord::myMethod() cannot be called statically - 我认为 PSR4 应该使用Oliverbj\Cord 加载?
  • 您注册了 Oliverbj\Cord 的命名空间 - 该命名空间中名为 Cord 的类的完全限定名称为 Oliverbj\Cord\Cord。无法静态调用非静态方法是一个不相关的错误
  • 听起来那个类不包含这样的静态方法?

标签: php laravel


【解决方案1】:

使用类 Cord 引起的问题

use OliverbjCordCord;

您应该写下完整的命名空间和类名。我希望这能解决您的问题 :)

【讨论】:

  • 这给了我错误 Non-static method OliverbjCordCord::myMethod() cannot be called statically - 我有一个 CordServiceProvider 应该负责包注册。查看更新的 OP
  • 您可以使用 Laravel Facades 为应用程序服务容器中可用的类提供静态接口,您可以创建自己的外观以使您的工作更轻松。本文将帮助你medium.com/@cmanish049/…
  • 或者你应该让 myMethod() 成为一个静态函数来调用它 static
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-14
  • 2017-12-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 2020-08-07
  • 2017-09-09
相关资源
最近更新 更多