Не столько вопрос о Laravel / Elasticsearch, сколько о пространстве имен PHP и автозагрузке PSR-4.
Если вы посмотрите файл composer.json
вашего приложения Laravel, вы найдете sth. как
"autoload": {
"psr-4": {
"App\\": "app/"
}
}
Это означает, что вы хотите следовать спецификации PSR-4 для пространств имен внутри вашего каталога /app
. По сути это означает, что ваша структура папок должна соответствовать иерархии вашего пространства имен.
Следовательно, задача 1: Вы упомянули, что внутри /app/Elastic.php
есть класс App\Elastic\Elastic
. Этот класс не может быть загружен вашим автозагрузчиком PSR-4, он должен быть в /app/Elastic/Elastic.php
ИЛИ быть объявленным в пространстве имен App\
.
Проблема 2: При звонке
$elastic = app(App\Elastic\Elastic::class);
внутри пространства имен, например App/
разрешается до App/App
, как говорится в ошибке.
Чтобы избежать этого, используйте \App\Elastic\Elastic::class
, как предлагает Anar, или импортируйте класс с помощью , используйте оператор.