Php Laravel ServiceContainer和Facade(初学者)
第一次使用国际奥委会和外墙。我想做一个“队长”的门面,这样我就可以打电话给他了Php Laravel ServiceContainer和Facade(初学者),php,laravel,inversion-of-control,Php,Laravel,Inversion Of Control,第一次使用国际奥委会和外墙。我想做一个“队长”的门面,这样我就可以打电话给他了 Teamleader::getCompaniesByCountry(); 我得到了错误 非静态方法Notflip\Teamleader\Teamleader::getCompaniesByCountry()不应静态调用,假设$this来自不兼容的上下文 这是我的服务提供商 <?php namespace Notflip\Teamleader; use Illuminate\Support\ServiceP
Teamleader::getCompaniesByCountry();
我得到了错误
非静态方法Notflip\Teamleader\Teamleader::getCompaniesByCountry()不应静态调用,假设$this来自不兼容的上下文
这是我的服务提供商
<?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()
{
//
}
}
您需要调用facade上的方法,而不是实际的类。因此,如果您的类是Notflip\Teamleader\Teamleader
,而您的facade是Notflip\Teamleader\Facades\Teamleader
,那么您基本上需要调用Notflip\Teamleader\Facades\Teamleader::getCompaniesByCountry()
显然你不想那样做。因此,您在config/app.php
文件中添加了一个别名。在“别名”数组下,可以添加:
'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();
});
非常感谢你!很好的书面回答和解决!
$this->app['teamleader'] = $this->app->bind('teamleader', function($app){
return new Teamleader();
});