Laravel -服务提供者-绑定多个类


Laravel - Service Provider - Bind multiple classes

我知道如何绑定单个类:

public function register() {
    $this->app->bind('search', 'Laracasts'Search'Search');
}

但是想象一下我的Laracasts'Search'目录有这些文件:

  • Search.php//class Search
  • SearchX.php//类SearchX
  • search .php//类搜索
  • SearchZ.php//类SearchZ

将这四个文件/类绑定到搜索facade的最佳方式是什么?

我在另一个不相关的问题中读到我们可以使用映射器。但如何?

为每个类/facade使用单独的绑定:

public function register() {
    $this->app->bind('search.x', 'Laracasts'Search'SearchX');
    $this->app->bind('search.y', 'Laracasts'Search'SearchY');
    ...
}

一个绑定只能绑定到一个对象。当然,在绑定类中,您可以做任何您喜欢的事情:

public function register() {
    $this->app->bind('search.all', 'Laracasts'Search'SearchAll');
}
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');