我在与创建与Laravel一个门面模型类有点小问题。我按照http://laravel.com/docs/facades,但我想我失去了一些东西。
我创建了一个叫做app/models
在foo
的文件夹。在该文件夹我有两个文件。
第一个文件(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'
在aliases
的app/config/app.php
阵列就跑composer update
和composer dump-autoload
。
现在,当我尝试运行Foo::method()
我得到Non-static method Mynamespace\Foo::method() should not be called statically
。我究竟做错了什么?
创建一个在您的facades
文件夹(app
)称为app/facades
文件夹。
门面文件夹添加到您的作曲家自动加载。
"autoload": {
"classmap": [
...
"app/facades"
]
},
创建该文件夹(FooFacade.php
)一个门面文件,并添加这些内容:
<?php
use Illuminate\Support\Facades\Facade;
class MyClass extends Facade {
protected static function getFacadeAccessor() { return 'MyClassAlias'; } // most likely you want MyClass here
}
创建app/models
(MyClass.php
)的模型。
<?php
namespace MyNamespace;
use Eloquent; // if you're extending Eloquent
class MyClass extends Eloquent {
...
}
创建一个新的服务提供商(你可以创建应用程序称为serviceproviders
一个文件夹并将其添加到自动加载作曲家)(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;
});
}
}
在这里,如果你想另一个门面(不要忘了,如果这样去制造假象文件),您可以添加新的绑定。
服务提供商加入到providers
的config/app.php
阵列。
'providers' => array(
...
'MyServiceProvider'
)
运行composer dump
所以我们可以访问我们的新课程。
您现在可以访问MyClassAlias::method()
作为幌子。
它在该职位很好地解释:http://fideloper.com/create-facade-laravel-4
希望能帮助到你
第1步:创建服务提供商
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
class NewFacadeServiceProvider extends ServiceProvider{
public function register(){
$this->app->singleton('TestFacades',function() {
//'TestFacades' alias name for the façade class
return new \App\TestFacade;
});
}
}
步骤2:创建延伸照亮\支持\外墙\门面类外墙类。
<?php
namespace App\Facade; //created 'facade' folder in app directory
use Illuminate\Support\Facades\Facade;
class TestFacade extends Facade{
protected static function getFacadeAccessor() {
return 'TestFacades'; //'TestFacades' alias name for the façade class declare in the class 'NewFacadeServiceProvider'
}
}
第3步:创建要添加函数的类(TestFacade.php)。
<?php
namespace App;
class TestFacade{
public function dummy(){
return "Business Logic ";
}
}
第4步:注册服务提供商,在配置\ App.php提供别名
'providers' => [ //...
App\Providers\NewFacadeServiceProvider::class
],
//Class Aliases
'aliases' => [ //...
'FacadeTester' => App\Facade\TestFacade::class,
]
调用函数Route.php:
Route::get('/skull',function(){
return FacadeTester::dummy();
});
在控制器调用函数:
return \FacadeTester::dummy();
一个简单的Laravel 5梅索德:
要创建一个门面,你需要3个部分组成:
这里有一个完整的例子:在这个例子中,我创建了门面ModulesConfig
为ModulesConfigReaderService
类。
1)需要服务类成为通过门面访问
<?php
namespace Hello\Services\Configuration\Portals;
use Illuminate\Support\Facades\Config;
class ModulesConfigReaderService
{
public function getSomething()
{
return 'Whatever';
}
}
这是一个很普通的类
2)外观所需的类
<?php
namespace Hello\Services\Configuration\Facade;
use Illuminate\Support\Facades\Facade;
class ModulesConfig extends Facade
{
protected static function getFacadeAccessor()
{
return 'modulesConfigReaderService';
}
}
从正面延伸简单的类
3)服务提供者
<?php
namespace Hello\Services\Configuration\Providers;
use Hello\Modules\Core\Providers\Abstracts\ServiceProvider;
class ModulesConfigServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->bind('modulesConfigReaderService', function(){
return $this->app->make('Hello\Services\Configuration\Portals\ModulesConfigReaderService');
});
}
}
一起结合所有服务提供商。
用法:
1)通常注册服务提供商
2)通过门面访问该服务类
$whatever = ModulesConfig::getSomething();