如何让服务提供者或特征将 Algolia 集成到我的 Laravel 的控制器中?
How do I make a service provider or trait to integrate Algolia in my Laravel's controllers?
我正在使用 Algolia search client PHP for Laravel
我想在没有 Laravel Scout 的情况下使用它。
现在我必须在每个需要使用 Algolia 的控制器中执行此操作:
$client = new \AlgoliaSearch\Client('xxx', 'xxx');
$index = $client->initIndex('index');
$index->doSomeAlgoliaFunction();
我怎样才能把它变成一个服务提供者,这样我就不必在每次需要时都初始化 Algolia?
您可以在您的基本控制器中执行此操作
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $client;
public function __contruct(){
$this->client = new \AlgoliaSearch\Client('xxx', 'xxx');
}
}
现在您可以在控制器中使用
$index = $this->client->initIndex('index');
$index->doSomeAlgoliaFunction();
希望对您有所帮助。
我建议您将其绑定到容器。在您的 App\Providers\AppServiceProvider
中,在 register
方法中:
namespace App\Providers;
use AlgoliaSearch\Client;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(Client::class, function () {
return new Client('xxx', 'xxx');
});
}
}
然后,如果您在控制器中需要它,例如,您可以在构造函数中对其进行类型提示,Laravel 将自动传递客户端实例。
use AlgoliaSearch\Client;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $client;
public function __contruct(Client $client)
{
$this->client = $client;
}
}
如果其他地方需要,可以使用app()
辅助函数从容器中获取。
use AlgoliaSearch\Client;
class Something
{
public function doMagic()
{
$algoliaIndex = app(Client::class)->initIndex('my_index_name');
$algoliaIndex->addObject(....);
}
}
注意 从 config()
或 env()
获取凭据,避免提交您的 ADMIN api 密钥。
我正在使用 Algolia search client PHP for Laravel 我想在没有 Laravel Scout 的情况下使用它。
现在我必须在每个需要使用 Algolia 的控制器中执行此操作:
$client = new \AlgoliaSearch\Client('xxx', 'xxx');
$index = $client->initIndex('index');
$index->doSomeAlgoliaFunction();
我怎样才能把它变成一个服务提供者,这样我就不必在每次需要时都初始化 Algolia?
您可以在您的基本控制器中执行此操作
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $client;
public function __contruct(){
$this->client = new \AlgoliaSearch\Client('xxx', 'xxx');
}
}
现在您可以在控制器中使用
$index = $this->client->initIndex('index');
$index->doSomeAlgoliaFunction();
希望对您有所帮助。
我建议您将其绑定到容器。在您的 App\Providers\AppServiceProvider
中,在 register
方法中:
namespace App\Providers;
use AlgoliaSearch\Client;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function register()
{
$this->app->singleton(Client::class, function () {
return new Client('xxx', 'xxx');
});
}
}
然后,如果您在控制器中需要它,例如,您可以在构造函数中对其进行类型提示,Laravel 将自动传递客户端实例。
use AlgoliaSearch\Client;
class Controller extends BaseController
{
use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
protected $client;
public function __contruct(Client $client)
{
$this->client = $client;
}
}
如果其他地方需要,可以使用app()
辅助函数从容器中获取。
use AlgoliaSearch\Client;
class Something
{
public function doMagic()
{
$algoliaIndex = app(Client::class)->initIndex('my_index_name');
$algoliaIndex->addObject(....);
}
}
注意 从 config()
或 env()
获取凭据,避免提交您的 ADMIN api 密钥。