无法在 Package 内使用laravel facase

wvt8vs2t  于 2022-12-14  发布在  其他
关注(0)|答案(1)|浏览(106)

我正在尝试为laravel编写一个包。我想使用facade并使用::调用一些动态类,如下所示:

Zaya::test();

因此,我结构是/packages/company/zaya,下面是我为包编写的代码:

"extra": {
        "laravel": {
            "providers": [
                "Company\\Zaya\\ZayaServiceProvider"
            ],
            "aliases": {
                "Zaya": "Company\\Zaya\\ZayaFacade"
            }
        }

这是我的风格:

protected static function getFacadeAccessor()
    {
        return 'zaya';
    }

这是我的服务提供商:

// Register the main class to use with the facade
        $this->app->singleton('zaya', function () {
            return new Zaya;
        });

最后这是我的课

<?php

namespace company\Zaya;

class Zaya
{
    public function test()
    {
        return 123;
    }
}

现在在我的控制器中,当我调用:

dd(Zaya::test());

我得到这个错误:

"message": "Non-static method Company\\Zaya\\Zaya::test() should not be called statically",
7rfyedvj

7rfyedvj1#

您可以使用app帮助器解析该类:

class MyFacade
{
    public static function __callStatic($method, $arguments)
    {
        $class = app(MyClass::class);

        return $class->$method(...$arguments);
    }
}

使用方法:

MyFacade::foo();
MyFacade::bar();
MyFacade::baz();
// or in your case
Zaya::test();

相关问题