一尘不染

如何使用Laravel创建外观类?

php

我在使用Laravel创建立面模型类时遇到了一些问题。我已经关注了http://laravel.com/docs/facades,但是我想我缺少了一些东西。

我创建了一个文件夹app/modelsfoo。在那个文件夹中,我有两个文件。

第一个文件(Foo.php):

<?php
namespace Mynamespace;

class Foo {
    public function method() {

    }
}
?>

第二个文件(FooFacade.php):

<?php
use Illuminate\Support\Facades\Facade;

class Foo extends Facade {
    protected static function getFacadeAccessor() { return 'foo'; }
}
?>

然后我将数组添加Foo => 'Mynamespace\Foo'aliasesapp/config/app.php并运行composer updatecomposer dump-autoload

现在,当我尝试跑步时,Foo::method()我得到了Non-static method Mynamespace\Foo::method() should not be called statically。我究竟做错了什么?


阅读 233

收藏
2020-05-29

共1个答案

一尘不染

步骤1

facadesapp文件夹(app/facades)中创建一个名为的文件夹。

第2步

将立面文件夹添加到您的作曲家自动加载中。

"autoload": {
    "classmap": [
        ...
        "app/facades"
    ]
},

第三步

在该文件夹(FooFacade.php)中创建一个Facade文件,并添加以下内容:

<?php
use Illuminate\Support\Facades\Facade;

class MyClass extends Facade {
    protected static function getFacadeAccessor() { return 'MyClassAlias'; } // most likely you want MyClass here
}

第四步

app/modelsMyClass.php)中创建一个模型。

<?php
namespace MyNamespace;

use Eloquent; // if you're extending Eloquent

class MyClass extends Eloquent {
    ...
}

第5步

创建一个新的服务提供商(您可以在应用程序中创建一个名为的文件夹serviceproviders,并将其添加到composer自动加载中)(app/models/MyClassServiceProvider.php)。

<?php
use Illuminate\Support\ServiceProvider;

class MyClassServiceProvider extends ServiceProvider {
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register() {
        $this->app->bind('MyClassAlias', function(){
            return new MyNamespace\MyClass;
        });
    }
}

如果需要另一个外观,可以在此处添加新的绑定(如果需要,请不要忘记创建外观文件)。

第6步

将服务提供者添加到中的providers数组config/app.php

'providers' => array(
    ...
    'MyServiceProvider'
)

步骤7

运行,composer dump以便我们可以访问我们的新类。

步骤8

您现在可以MyClassAlias::method()作为外观访问。

2020-05-29