我知道如何绑定单个类:
public function register() {
$this->app->bind('search', 'LaracastsSearchSearch');
}
但是想象一下我的LaracastsSearch
目录有这些文件:
- Search.php//class Search
- SearchX.php//类SearchX
- search .php//类搜索
- SearchZ.php//类SearchZ
将这四个文件/类绑定到搜索facade的最佳方式是什么?
我在另一个不相关的问题中读到我们可以使用映射器。但如何?
为每个类/facade使用单独的绑定:
public function register() {
$this->app->bind('search.x', 'LaracastsSearchSearchX');
$this->app->bind('search.y', 'LaracastsSearchSearchY');
...
}
一个绑定只能绑定到一个对象。当然,在绑定类中,您可以做任何您喜欢的事情:
public function register() {
$this->app->bind('search.all', 'LaracastsSearchSearchAll');
}
class SearchAll() {
private $searchers = []; // an array of searchers
// Use Laravel Dependency Injection to instantiate our searcher classes
public function __construct(SearchX $searchX, SearchY $searchY) {
$this->searchers = [$searchX, $searchY];
}
public function search($value) {
$matches = [];
foreach ($this->searchers() as $searcher) {
$matches += $searchers->search();
}
return $matches;
}
}
// elsewhere in your app...
$searcher = app('search.all');
$matches = $searcher->search('hello');