Laravel ServiceContainer 和 Facade(初学者)
Laravel ServiceContainer and Facade (beginner)
第一次使用 IOC 和 Facades。我正在尝试制作一个 "teamleader" 门面以便我可以调用
Teamleader::getCompaniesByCountry();
我遇到了错误
Non-static method Notflip\Teamleader\Teamleader::getCompaniesByCountry() should not be called statically, assuming $this from incompatible context
这是我的 ServiceProvider
<?php namespace Notflip\Teamleader;
use Illuminate\Support\ServiceProvider;
class TeamleaderServiceProvider extends ServiceProvider {
public function register()
{
$this->app['teamleader'] = $this->app->bind('teamleader', function($app){
return new Teamleader();
});
}
public function boot()
{
//
}
}
这是我的外观
<?php namespace Notflip\Teamleader\Facades;
use Illuminate\Support\Facades\Facade;
class Teamleader extends Facade {
protected static function getFacadeAccessor() { return 'teamleader'; }
}
您需要调用外观上的方法,而不是实际的 class。所以如果你的 class 是 Notflip\Teamleader\Teamleader
而你的门面是 Notflip\Teamleader\Facades\Teamleader
那么你基本上需要调用 Notflip\Teamleader\Facades\Teamleader::getCompaniesByCountry()
.
显然你不想那样做。因此,您在 config/app.php
文件中添加了一个别名。在 'Aliases' 数组下,您可以添加:
'TeamLeader' => 'Notflip\Teamleader\Facades\Teamleader'
那么你可以打电话给\Teamleader::getCompaniesByCountry()
此外,您可能需要将您的服务提供商更改为:
$this->app->bind('teamleader', function($app){
return new Teamleader();
});
而不是这个:
$this->app['teamleader'] = $this->app->bind('teamleader', function($app){
return new Teamleader();
});
第一次使用 IOC 和 Facades。我正在尝试制作一个 "teamleader" 门面以便我可以调用
Teamleader::getCompaniesByCountry();
我遇到了错误
Non-static method Notflip\Teamleader\Teamleader::getCompaniesByCountry() should not be called statically, assuming $this from incompatible context
这是我的 ServiceProvider
<?php namespace Notflip\Teamleader;
use Illuminate\Support\ServiceProvider;
class TeamleaderServiceProvider extends ServiceProvider {
public function register()
{
$this->app['teamleader'] = $this->app->bind('teamleader', function($app){
return new Teamleader();
});
}
public function boot()
{
//
}
}
这是我的外观
<?php namespace Notflip\Teamleader\Facades;
use Illuminate\Support\Facades\Facade;
class Teamleader extends Facade {
protected static function getFacadeAccessor() { return 'teamleader'; }
}
您需要调用外观上的方法,而不是实际的 class。所以如果你的 class 是 Notflip\Teamleader\Teamleader
而你的门面是 Notflip\Teamleader\Facades\Teamleader
那么你基本上需要调用 Notflip\Teamleader\Facades\Teamleader::getCompaniesByCountry()
.
显然你不想那样做。因此,您在 config/app.php
文件中添加了一个别名。在 'Aliases' 数组下,您可以添加:
'TeamLeader' => 'Notflip\Teamleader\Facades\Teamleader'
那么你可以打电话给\Teamleader::getCompaniesByCountry()
此外,您可能需要将您的服务提供商更改为:
$this->app->bind('teamleader', function($app){
return new Teamleader();
});
而不是这个:
$this->app['teamleader'] = $this->app->bind('teamleader', function($app){
return new Teamleader();
});