#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. Прежде всего, спасибо за быстрый ответ! Я пришлю остальное.