Lumen Container.php正在尝试构建它不支持的类';不必
我目前正在使用Lumen来构建API,同时也在玩弹性搜索。我与一家服务提供商建立了一个名为GeocodeService的服务,该服务提供商目前正在构建弹性搜索客户端,并将其注入GeocodeService。这些类的代码如下所示 GeocodeService.phpLumen Container.php正在尝试构建它不支持的类';不必,php,
elasticsearch,lumen,Php,
elasticsearch,Lumen,我目前正在使用Lumen来构建API,同时也在玩弹性搜索。我与一家服务提供商建立了一个名为GeocodeService的服务,该服务提供商目前正在构建弹性搜索客户端,并将其注入GeocodeService。这些类的代码如下所示 GeocodeService.php <?php namespace App\Services; use App\Models\ElasticSearch\Geocode; use Elasticsearch\Client; class GeocodeServi
<?php
namespace App\Services;
use App\Models\ElasticSearch\Geocode;
use Elasticsearch\Client;
class GeocodeService
{
protected $client;
public function __construct(
Client $client
)
{
$this->client = $client;
}
}
如果我在GeocodeService类的构造函数的第一行调用dd($client),那么我将获得客户机对象的输出,并且没有错误
所以我的问题是,有人知道这个问题的根源吗?如果我能做些什么来防止它
如果你需要任何进一步的信息,请告诉我
提前感谢您的回复 您可以将
Elasticsearch\Client
的实现绑定到容器中。类似于(在您的服务提供商中):
使用Container::make
方法:
$geocodeService = app(App\Services\GeocodeService::class);
// or
$geocodeService = app()->make(App\Services\Geocode::class);
// or via Facade
// make sure you have uncommented '$app->withFacades()' in
// bootstrap/app.php file
$geocodeService = App::make(App\Services\Geocode::class);
嘿,我也遇到了这个问题:我的代码像$this->app->bind('\ElasticSearch\Client',function($app){returnnew\ElasticSearch\Client();});在我的控制器中输入的客户端。。它试图获得内部传输类。。你知道为什么吗?你试过使用
Elasticsearch\ClientBuilder::create()->build()
而不是new\Elasticsearch\Client()
?嗨,克莉桑,谢谢你的快速回复。。我解决了这个问题。。第一件事。。必须按照你说的那样使用建筑商。。第二期我写的是ElasticSearch而不是ElasticSearch所有地方。。坏类型:(…我花了3小时才弄明白.)。。
BindingResolutionException in Container.php line 824:
Unresolvable dependency resolving [Parameter #0 [ <required> $retries ]] in class Elasticsearch\Transport
in Container.php line 824
at Container->resolveNonClass(object(ReflectionParameter)) in Container.php line 799
at Container->getDependencies(array(object(ReflectionParameter), object(ReflectionParameter), object(ReflectionParameter), object(ReflectionParameter)), array()) in Container.php line 772
at Container->build('Elasticsearch\Transport', array()) in Container.php line 627
at Container->make('Elasticsearch\Transport', array()) in Application.php line 447
at Application->make('Elasticsearch\Transport') in Container.php line 838
<?php
namespace App\Providers;
use Elasticsearch\Client;
use Elasticsearch\ClientBuilder;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
/**
* Register any application services.
*
* @return void
*/
public function register()
{
$this->app->bind(Client::class, function () {
return ClientBuilder::create()->build();
});
}
}
$geocodeService = new App\Services\GeocodeService(
Elasticsearch\ClientBuilder::create()->build()
);
$geocodeService = app(App\Services\GeocodeService::class);
// or
$geocodeService = app()->make(App\Services\Geocode::class);
// or via Facade
// make sure you have uncommented '$app->withFacades()' in
// bootstrap/app.php file
$geocodeService = App::make(App\Services\Geocode::class);