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 update和composer dump-autoload.
现在,当我尝试跑步时,Foo::method()我得到了Non-static method Mynamespace\Foo::method() should not be called statically.我究竟做错了什么?
Mar*_*lln 49
创建文件夹中调用facades的app文件夹(app/facades).
将facade文件夹添加到composer autoload.
"autoload": {
"classmap": [
...
"app/facades"
]
},
Run Code Online (Sandbox Code Playgroud)
在该文件夹(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)
在app/models(MyClass.php)中创建模型.
<?php
namespace MyNamespace;
use Eloquent; // if you're extending Eloquent
class MyClass extends Eloquent {
...
}
Run Code Online (Sandbox Code Playgroud)
创建一个新的服务提供者(您可以在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)
如果你想要另一个外观,你可以在这里添加新的绑定(如果是这样,别忘了创建一个外观文件).
将服务提供者添加到providers数组中config/app.php.
'providers' => array(
...
'MyServiceProvider'
)
Run Code Online (Sandbox Code Playgroud)
运行composer dump,我们可以访问我们的新类.
您现在可以MyClassAlias::method()作为外观访问.
| 归档时间: |
|
| 查看次数: |
16825 次 |
| 最近记录: |