如何使用Laravel创建外观类?

Mar*_*lln 25 php facade laravel

我在使用Laravel创建一个Facade模型类时遇到了一些问题.我已经关注了http://laravel.com/docs/facades,但我想我错过了一些东西.

我已经创建了一个app/models名为的文件夹foo.在该文件夹中,我有两个文件.

第一个文件(Foo.php):

<?php
namespace Mynamespace;

class Foo {
    public function method() {

    }
}
?>
Run Code Online (Sandbox Code Playgroud)

第二个文件(FooFacade.php):

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

class Foo extends Facade {
    protected static function getFacadeAccessor() { return 'foo'; }
}
?>
Run Code Online (Sandbox Code Playgroud)

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

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

Mar*_*lln 49

步骤1

创建文件夹中调用facadesapp文件夹(app/facades).

第2步

将facade文件夹添加到composer autoload.

"autoload": {
    "classmap": [
        ...
        "app/facades"
    ]
},
Run Code Online (Sandbox Code Playgroud)

第3步

在该文件夹(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
}
Run Code Online (Sandbox Code Playgroud)

第4步

app/models(MyClass.php)中创建模型.

<?php
namespace MyNamespace;

use Eloquent; // if you're extending Eloquent

class MyClass extends Eloquent {
    ...
}
Run Code Online (Sandbox Code Playgroud)

第5步

创建一个新的服务提供者(您可以在app中创建一个名为的文件夹serviceproviders并将其添加到composer autoload)(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;
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

如果你想要另一个外观,你可以在这里添加新的绑定(如果是这样,别忘了创建一个外观文件).

第6步

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

'providers' => array(
    ...
    'MyServiceProvider'
)
Run Code Online (Sandbox Code Playgroud)

第7步

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

第8步

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

  • 真棒!您可能想在config/app.php中将''Foo'=>'FooFacade'添加到别名中 (5认同)