Php 尝试从IOC容器实例化依赖项时出现未定义的属性异常
我想加深我对拉威尔建筑的了解 我有一个搜索引擎弹性搜索的例子,但这个搜索引擎可能会改变在未来。因此,我正在尝试为此编写一个容器,因此,如果我将来要更改引擎,我将只需更改容器。我相信术语是工厂设计 我创建了一个provider app/providers/datafromsearchine.php,如下所示:Php 尝试从IOC容器实例化依赖项时出现未定义的属性异常,php,laravel,laravel-5,Php,Laravel,Laravel 5,我想加深我对拉威尔建筑的了解 我有一个搜索引擎弹性搜索的例子,但这个搜索引擎可能会改变在未来。因此,我正在尝试为此编写一个容器,因此,如果我将来要更改引擎,我将只需更改容器。我相信术语是工厂设计 我创建了一个provider app/providers/datafromsearchine.php,如下所示: use Illuminate\Support\ServiceProvider; class DataFromSearchEngine extends ServiceProvider {
use Illuminate\Support\ServiceProvider;
class DataFromSearchEngine extends ServiceProvider {
public function boot()
{
//
}
public function register()
{
$this->app->singleton('SearchEngine', function($app) {
return new elasticSearch;
});
}
}
然后我在config/app.php的providers数组中注册了它
下一步是从我的控制器调用SearchEngine:
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class SearchController extends Controller {
protected $searchEngine;
public function __construct() {
$this->searchEngine = $this->app->make('SearchEngine');
}
}
但所有这些都会产生:未定义的属性:App\Http\Controllers\SearchController::$App
有人能解释一下我遗漏了什么吗?不要使用$this->app,试着使用app
这是因为非继承的控制器类,即App\Http\Controllers\controller或light\Routing\Controllers\controller,在它们上有一个App属性
请注意,您可以使用app'SearchEngine',它相当于app->make'SearchEngine',作为创建对象的快捷方式。请尝试使用app,而不是使用$this->app
这是因为非继承的控制器类,即App\Http\Controllers\controller或light\Routing\Controllers\controller,在它们上有一个App属性
请注意,您可以使用app'SearchEngine',它相当于app->make'SearchEngine',作为创建对象的快捷方式。我在尝试创建服务提供商时遇到了这个问题。我在AppServiceProvider.php中注册了我的服务提供商,但仍然收到相同的错误。问题是,在我的ServiceProvider中,我需要将extends ServiceProvider添加到我的类中。看起来很简单,但经常被忘记。我在尝试创建服务提供商时遇到了这个问题。我在AppServiceProvider.php中注册了我的服务提供商,但仍然收到相同的错误。问题是,在我的ServiceProvider中,我需要将extends ServiceProvider添加到我的类中。看起来很简单,但经常被忘记。不要使用$this->app,尝试将app作为非继承控制器类使用,其中有一个app属性。您可以将其作为答案发布,以便我可以接受它吗?不要使用$this->app,尝试将app作为非继承控制器类使用,其中有一个app属性。您可以将其作为答案发布,以便我可以接受它吗可以接受吗?请注意,您可以使用app->make'Foo'或app'Foo'作为快捷方式:请注意,您可以使用app->make'Foo'或app'Foo'作为快捷方式:
namespace App\Http\Controllers;
use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class SearchController extends Controller {
protected $searchEngine;
public function __construct() {
$this->searchEngine = $this->app->make('SearchEngine');
}
}