#api-platform.com
#api-platform.com
Вопрос:
Я только что попробовал https://api-platform.com/docs/core/operations/#recommended-method пример.
- Я сгенерировал
Book.class
, как описано - Добавить
CreateBookPublication
класс - Если я вызываю API, я получаю следующую ошибку:
(1/1) Исключение RuntimeException Не может автоматически подключить службу «App Controller CreateBookPublication»: аргумент «$bookPublishingHandler» метода «__construct()» имеет тип «App Controller BookPublishingHandler», но этот класс не найден.
У вас есть какие-либо идеи? Я хотел бы сгенерировать собственный жестко запрограммированный ответ без doctrine для целей тестирования.
Ответ №1:
Похоже, у вас нет BookPublishingHandler
класса, вы должны реализовать его самостоятельно, этот пример документации не является полностью рабочей демонстрацией.
Ошибка говорит, что DI пытается найти AppControllerCreateBookPublication
, но он не существует или не зарегистрирован как сервис. Я предполагаю, что вы используете конфигурацию по умолчанию, и она автоматически регистрирует службы, найденные в src/
каталоге.
Итак, создайте каталог src/Handler
, внутри создайте файл класса BookPublishingHandler.php
<?php
namespace AppHandler;
use AppEntityBook;
class BookPublishingHandler
{
public function handle(Book $book): array
{
// your logic for publishing book or/and eg. return your custom data
}
}
и добавьте импорт в ваш контроллер CreateBookPublication
<?php
namespace AppController;
use AppHandlerBookPublishingHandler;
Или вы можете просто для проверки вернуть жестко закодированный массив непосредственно из контроллера.
Комментарии:
1. Привет, большое спасибо за ваш ответ. У меня все еще есть проблемы.
2. @Ludi Я обновил ответ, в моем примере вы должны поместить свой
BookPublishingHandler
класс вsrc/
папкуsrc/Handler/
3. Привет, теперь кажется, что все работает нормально. У меня все еще есть один вопрос. Почему необходимо создать контроллер CreateBookPublication и обработчик BookPublishingHandler? Я легко мог бы разместить весь код в контроллере.
4. В этом нет необходимости, вы можете выполнять всю работу в контроллере, но рекомендуется разделять код на классы с единой ответственностью ( en.wikipedia.org/wiki/Single_responsibility_principle ), это первый из en.wikipedia.org/wiki/SOLID принципы