Попытка добавить библиотеку в Symfony с помощью композитора

Я пытаюсь добавить следующую библиотеку (ссылка на сайт) в свой проект Symfony с помощью композитора.

Я сбежал

composer require jaggedsoft/php-binance-api

без проблем, но при загрузке страницы появляется следующая ошибка.

Attempted to load class "API" from namespace "App\Controller\Binance". Did you forget a "use" statement for another namespace?

public function index(){
   require '../vendor/autoload.php';
   $api = new Binance\API("<api key>","<secret>");
}

Теперь я предполагаю, что мне нужно добавить оператор использования, но я немного зациклился на том, что мне нужно добавить.

вы можете либо префикс \ so new \Binance\Api, либо использовать операторы использования, как предлагает php ^^, по-видимому, достаточно просто добавить use Binance после вашего пространства имен.

Jakumi 05.05.2018 11:24

Если я добавлю «используйте App \ Controller \ Binance;» Я все еще получаю то же сообщение об ошибке

ORStudios 05.05.2018 11:26

Дело в том, что ваш файл имеет пространство имен App\Controller, поэтому предполагается, что все, что не определено иначе, находится в этом пространстве имен. Binance\API например нет.

Jakumi 05.05.2018 11:27

Оператор require vendor / autoload находится в самом верху самого первого загруженного файла. Вы бы не поместили его в вызов метода. Ничего общего с пространствами имен или операторами использования.

Cerad 05.05.2018 16:39

@Cerad, я проверил файл index.php, и он уже включает требование DIR. '/ .. / vendor / autoload.php'; Итак, я убрал эту строку, но я все еще пытаюсь загрузить класс «API» из пространства имен «App \ Controller \ Binance». Вы забыли инструкцию use для другого пространства имен?

ORStudios 05.05.2018 17:00

Мне интересно, нужно ли мне что-то добавить или объявить где-то еще в рамках.

ORStudios 05.05.2018 17:06

Удалось решить эту проблему, мне нужно было включить «использовать Binance»; вверху файла

ORStudios 05.05.2018 17:10

Рад, что у тебя все получилось. Я предполагаю, что код, который вы разместили в своем вопросе: new Binance \ API (); на самом деле был просто новым API (); Отсюда необходимость в заявлении об использовании.

Cerad 05.05.2018 17:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
8
469
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы повторить то, что я предложил в комментариях (варианты 1 и 3 ниже):

Пространство имен вашего файла - хотя оно явно не написано в вашем сообщении - это:

App\Controller

без какого-либо оператора use, new Binance\API(...) интерпретируется как:

App\Controller\Binance\API

который представляет собой конкатенацию App\Controller (ваше пространство имен) и Binance\API (используемое имя класса).

что, конечно, не то, что вы хотите использовать, так как это то, что вы пытались включить из пакета binance. Это также объясняет сообщение об ошибке.

Attempted to load class API from namespace App\Controller\Binance. Did you forget a use statement for another namespace?

что именно пошло не так. PHP попытался загрузить App\Controller\Binance\API, который является классом API из пространства имен App\Controller\Binance.

Теперь есть несколько разных способов исправить это:

  1. добавьте use Binance; в заголовок вашего файла, тогда вы можете использовать new Binance\API(...)
  2. добавьте use Binance\API; в заголовок вашего файла, тогда вы можете использовать new API(...)
  3. не добавляйте оператор use, тогда вы можете использовать new \Binance\APi(...)
  4. добавьте use Binance as Something; в заголовок вашего файла, затем вы можете использовать new Something\API(...); (псевдоним родительского пространства имен Binance, поскольку Something может разрешать конфликты имен)
  5. добавьте use Binance\API as BinanceApi; в заголовок вашего файла, тогда вы можете использовать new BinanceApi(...);

Вы решили использовать вариант 1. Что предпочтительнее, если класс (в данном случае API) сам по себе не очень выразительный или уникальный - то же самое и с вариантом 5. Однако, если вы используете больше классов из пространства имен Binance, вариант 1 предпочтительнее.

Вариант 3 будет работать с всегда (и может показаться предпочтительным, если какой-либо из других вариантов по какой-то причине кажется излишним) - вы вообще можете обойтись без какого-либо оператора use, но его чтение и запись может вызвать разочарование.

В целом, все варианты жизнеспособны, и решать какой использовать. Смешивание этих вариантов может привести к путанице. Внутри Symfony я чаще всего видел вариант 2 со случайным псевдонимом (use ... as ...;), особенно при использовании аннотаций DoctrineORM или при расширении некоторого класса, который имеет то же имя класса, но в другом пространстве имен:

namespace [package1];

use [package2]\[ClassName] as Base[ClassName];

class [ClassName] extends Base[ClassName] { ... }

Надеюсь, это объяснение поможет. Документация php для пространств имен действительно полезна, если вы понимаете основную концепцию пространств имен.

Спасибо за объяснение, это очень помогает

ORStudios 06.05.2018 13:34

Другие вопросы по теме