В Laravel мне нужно общаться со сторонним API. Они дали мне некоторую реализацию (класс) PHP, которую я могу использовать для подключения и связи с их API. Но когда я пробую это как класс в подпапке папки приложения и добавляю это в свой контроллер, я получаю ошибку класса, не найденную.
Я добавил папку «Qenner» (поставщик API) в папку приложения. И скопировал туда свои классы. В моем контроллере я использую эти классы и добавляю пример кода, как будто мне его прислали.
Код контроллера (API-KEY заменен фактическим ключом):
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Qenner\Search;
use QennerSearch\ServiceClient;
class TestController extends Controller
{
public function index() {
$search = new Search('https://search.qenner.com', 'API-KEY', true, 'nl-NL');
$response = $search->getCriteria([], ['Country'], []);
if (!$response->isError()) {
$criterionSets = $response->getCriterionSets();
$countryCriterionSet = criterionSets[0];
$countries = $countryCriterionSet->getCriteria();
$resultCount = $response->getResultCount();
}
dd($response);
}
Search.php в папке Qenner:
/**
* @file
* Contains QennerSearch\Search.
*/
namespace QennerSearch;
use QennerSearch\model\messages\CriterionTypesResponse;
use QennerSearch\model\messages\CriteriaRequest;
use QennerSearch\model\messages\CriteriaResponse;
use QennerSearch\model\messages\ErrorResponse;
use QennerSearch\model\messages\SearchRequest;
use QennerSearch\model\messages\SearchResponse;
use QennerSearch\model\messages\PriceRequest;
use QennerSearch\model\messages\PriceResponse;
use QennerSearch\model\messages\AccommodationInfoRequest;
use QennerSearch\model\messages\AccommodationInfoResponse;
use QennerSearch\model\messages\AutoCompleteRequest;
use QennerSearch\model\messages\AutoCompleteResponse;
/**
* Class Search, using ServiceClient to communicate, implementing the SearchInterface
*
* @package QennerSearch
*/
class Search extends ServiceClient implements SearchInterface {
.....
В папке есть ServiceClient.php
ServiceClient.php
/**
* @file
* Contains QennerSearch\Search.
*/
namespace QennerSearch;
use GuzzleHttp\Client;
use GuzzleHttp\Exception\RequestException;
/**
* Class Search.
*
* @package QennerSearch
*/
class ServiceClient {
protected $http_client = null;
protected $engine_url = null;
protected $api_key = null;
protected $log_calls = false;
protected $locale = null;
protected $last_result_code = 0;
protected $last_error_body = null;
public function __construct($engine_url, $api_key, $log_calls = false, $locale = "nl-NL") {
$this->http_client = new Client();
$this->engine_url = $engine_url;
$this->api_key = $api_key;
$this->log_calls = $log_calls;
$this->locale = $locale;
Я получаю эту ошибку:
Класс QennerSearch\ServiceClient не найден
Пока я ожидал дамп вывода






Увидев структуру вашей папки в комментариях, я считаю, что ServiceClient.php и Search.php находятся внутри папки: app\Qenner, следовательно, внутри этих файлов:
везде, где вы используете: namespace QennerSearch;
вы должны использовать: namespace App\Qenner;
а затем внутри вашего контроллера вместо использования: use QennerSearch\ServiceClient;
использовать: namespace App\Qenner\ServiceClient
Пространства имен не похожи на псевдонимы, они должны отражать положение самого файла, если это имеет смысл.
Пожалуйста, попробуйте и дайте мне знать, если это работает.
пожалуйста, вставьте также свою структуру папок, где какой файл, в каких папках, ServiceClient.php и ваш контроллер
приложение\Http\Controllers\TestController.php приложение\Qenner\Search.php приложение\Qenner\ServiceClient.php
Это сработало, спасибо, теперь я получаю сообщения о не найденных сообщениях другого класса, но сначала я попытаюсь решить их сам :)
Рад, что смог помочь :) удачного кодирования
За исключением контроллера, это все от 3-ей стороны. Я добавил первую часть кода ServiceClient.php к проблеме выше. Кажется, это уже добавлено туда