Сервер MAMP неправильно отвечает на запрос api post: Внутренняя ошибка сервера 500: „Вызов функции-члена search() при нулевом значении“

#php #symfony #routes #controller #shopware

Вопрос:

Я следую курсу о shopware 6 о том, как отображать данные по всей витрине магазина, которые будут снабжены контроллером API. Я уже несколько раз проверял код с помощью кода учебника и не могу найти никаких ошибок. Клиент API Insomnia способен распознавать маршрут API, тем не менее, сервер отвечает внутренней ошибкой сервера.

 public function generate(Context $context): Response
{
    $faker = Factory::create();
    $country = $this->getActiveCountry($context);
    $data = [];
    for ($i = 0; $i < 50; $i  ) {
        $data[] = [
            'id' => Uuid::randomHex(),
            'active' => true,
            'name' => $faker->name,
            'street' => $faker->streetAddress,
            'postCode' => $faker->postcode,
            'city' => $faker->city,
            'countryId' => $country->getId(),
        ];
    }
    $this->shopFinderRepository->create($data, $context);


    return new Response('', Response::HTTP_NO_CONTENT);
}
 

На самом деле я совсем новичок в symfony и не умею бегло читать и понимать код функции getActiveCountry(). Я предполагаю, что я что-то упустил в этой функции.
Ответ, который я должен получить, — это 204 HTTP_NO_CONTENT. Если бы кто-нибудь мог прояснить для меня этот блок кода и устранить эту ошибку, я был бы вам очень признателен.

Доменный маршрут (предложен документами shopware 6).:

 @RouteScope({"api"});
 

API администратора:

 * @Route("/api/v{version}/_action/swag-shop-finder/generate", name="api.custom.swag_shop_finder.generate", methods={"POST"})
 

Контроллер API зарегистрирован в services.xml и отдельный routes.xml файл:

  <service id="SwagShopFinderCoreApiDemoDataController" public="true">
        <argument id="country.repository" type="service" />
        <argument id="swag_shop_finder.repository" type="service" />
        <call method="setContainer">
            <argument type="service" id="service_container" />
        </call>
    </service>
 

routes.xml файл:

  <import resource="../../**/Api/*Controller.php" type="annotation" />
 

сообщение об ошибке:

 "code": "0",
  "status": "500",
  "title": "Internal Server Error",
  "detail": "Call to a member function search() on null"

"file": "/Applications/MAMP/htdocs/shopware6_testing/custom/plugins/SwagShopFinder/src/Core/Api/DemoDataController.php",
        "line": 63,
        "function": "getActiveCountry",
        "class": "SwagShopFinder\Core\Api\DemoDataController",
        "type": "->",
 

Строка 94:

  /**
 * @param Context $context
 * @return CountryEntity
 * @throws CountryNotFoundException
 * @throws InconsistentCriteriaIdsException
 */
private function getActiveCountry(Context $context): CountryEntity
{
    $criteria = new Criteria();
    $criteria->addFilter(new EqualsFilter('active', '1'));
    $criteria->setLimit(1);

    $country = $this->countryRepository->search($criteria, $context)->getEntities()->first();
    if ($country === null) {
        throw new CountryNotFoundException('');
    }
    return $country;
}
 

Комментарии:

1. В вашей DemoDataController строке 63 есть переменная null, для которой вы пытаетесь вызвать search метод. Это код, который нам нужен, чтобы помочь вам понять, почему.

2. Прежде всего, спасибо за быстрый ответ! Я пришлю остальное.