ParamConverter позволяет вызвать конвертер для преобразования идентификатора (или другого поля как slug, name и т. Д. c ...) в сущность
Для меня использовать Эта функция, вы должны обновить свой код следующим образом (изменить имя объекта в параметре функции, если я ошибаюсь с именем класса объекта), я пытаюсь использовать свой собственный код и объект, и это даст мне правильную сущность для данного идентификатора в URL, так что это должно работать для стороны symfony, я не уверен, что Ajax вызов
/**
* @Route("recommendations/add-product/{productId}/{recommandationId}", name="recommendations.add.product",
* requirements={"productId": "\d+", "recommandationId": "\d+"})
* @Entity("product", expr="repository.find(productId)")
* @Entity("recommandation", expr="repository.find(recommandationId)")
* @param Request $request
* @return JsonResponse
*/
public function canevasAddProduct( Request $request, Product $product, Recommandation $recommandation )
{
if ($request->isXmlHttpRequest()) {
//-- SETTERS
$recommendationProducts = new RecommendationProducts();
$recommendationProducts->setProduct( $product );
$recommendationProducts->setRecommendation( $recommandation );
//-- Go to db new entry
$this->em->persist($recommendationProducts);
$this->em->flush();
return $this->json([
'name_product' => $recommendationProducts->getProduct()->getName()
], 200);
}
return new JsonResponse([
'message' => 'AJAX Only',
'type' => 'error'
]);
}
и обновление Ajax вызов для ввода идентификатора в URL, а не в данные
$(".isProduct").click(function (e) {
let productId = $(this).attr('product_id')
let name = $(this).text()
$.ajax({
url: '/recommendations/add-product/'+productId+'/'+{{ recommendations.id }},
type: 'POST',
complete : function (response) {
$.toast({
heading: 'Produit ajouté avec succès',
text: 'Ajout de ' + name,
position: 'bottom-right',
loaderBg: '#ff6849',
icon: 'success',
hideAfter: 3000,
stack: 6
});
let nameProduct = response.responseJSON['name_product']
let input = '<li><b>'+ nameProduct +'</b> <small>0.75 L/ha</small></li>'
$('#products_list').append( input )
}
})
})