cmv*_*mvr 1 php laravel laravel-5
我正在努力加深我在laravel建筑中的知识.
我有一个搜索引擎(为了示例而进行弹性搜索),但此搜索引擎将来可能会发生变化.所以我试着为此写一个容器,所以万一我以后会改变引擎,我将只需要改变容器.(我相信这个界限是工厂设计的吗?)
我创建了一个如下所示的提供程序app/providers/DataFromSearchEngine.php:
use Illuminate\Support\ServiceProvider;
class DataFromSearchEngine extends ServiceProvider {
public function boot()
{
//
}
public function register()
{
$this->app->singleton('SearchEngine', function($app) {
return new elasticSearch;
});
}
}
Run Code Online (Sandbox Code Playgroud)然后我在提供者数组中注册了它config/app.php.
'providers' => [
// providers...
'App\Providers\DataFromSearchEngine'
],
Run Code Online (Sandbox Code Playgroud)下一步是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');
}
}
Run Code Online (Sandbox Code Playgroud)但所有这些产量:未定义的属性: App\Http\Controllers\SearchController::$app
有人能解释我错过了什么吗?
而不是使用$this->app尝试使用app().
这是因为继承的控制器类,即非App\Http\Controllers\Controller或Illuminate\Routing\Controllers\Controller对他们的应用程序性能.
作为注释,您可以使用app('SearchEngine')相当于app()->make('SearchEngine')制作对象的快捷方式.
| 归档时间: |
|
| 查看次数: |
3582 次 |
| 最近记录: |