Symfony POST Value Id преобразуется в сущность - PullRequest
0 голосов
/ 30 марта 2020

это новый вопрос, но я не нашел ответа в сети: '(

У меня есть Ajax скрипт, отправляющий идентификатор продукта и идентификатор рекомендации с методом POST

$(".isProduct").click(function (e) {
            let productId = $(this).attr('product_id')
            let name = $(this).text()
            $.ajax({
                url: '/recommendations/add-product',
                type: 'POST',
                data: {
                    'recommendationId': {{ recommendations.id }},
                    'productId': productId
                },
                dataType: 'JSON',
                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 )
                }
            })
        })

Я посылаю два идентификатора моему контроллеру

На моем контроллере я хочу преобразовать этот идентификатор (String) в Entity для помещения его в реляционный db

/**
     * @Route("recommendations/add-product", name="recommendations.add.product")
     * @param Request $request
     * @return JsonResponse
     */
    public function canevasAddProduct( Request $request )
    {
        if ($request->isXmlHttpRequest()) {
            //-- SETTERS
            $recommendationProducts = new RecommendationProducts();
            $recommendationProducts->setProduct( $request->get('productId') );
            $recommendationProducts->setRecommendation( $request->get( 'recommendationId') );

            //-- 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'
        ]);
    }

Я использую $ request-> get () но он возвращает строку, а не объект объекта. Я использую @ParamsConverter, но не работает.

Большое спасибо

Ответы [ 3 ]

1 голос
/ 30 марта 2020

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 )
        }
    })
})
0 голосов
/ 31 марта 2020

@ ParamsConverter не может работать с обязательством значения POST для использования значения GET

0 голосов
/ 30 марта 2020

Для получения данных вы можете использовать

json_decode($request->getContent());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...