Siedze od jakiegos czasu nad wydawaloby sie prosta rzecza, a jednak nie wiem, jak naprawic problem. Chce przekazac 2 parametry: status produktu oraz jego id do url'a przy uzyciu JS.
W templatce mam taki oto fragment kodu:
<form id="jsForm" role="form" method="POST" action=""> ... ... </form> <script> (function($) { function ajaxPost(action, callback) { ... } var form = $('#jsForm'), isActiveBtn = form.find('.js-isActive'); isActiveBtn.on('click', function(){ var url = '{{ path('admin_updateisactive', { 'status': 1111, 'id': 2222 }) }}', status = $(this).data('action'), id = $(this).data('id'); jsFormUrl = url.replace("1111", status + "2222" + id); ajaxPost('updateIsActive'); }); form.on('submit', ajaxPost); })(jQuery); </script>
W pliku routing.yml widnieje zapis:
admin_updateisactive: path: /admin/updateisactive/{status}/{id} defaults: { _controller: "AdminBundle:Products:updateIsActive", status: 1, id: 2 } requirements: { methods: post }
Fragment z kontrolera:
public function updateIsActiveAction(Request $request, $status, $id) { $status = ($status == 1); $em = $this->getDoctrine()->getManager(); $product = $em->getRepository('AdminBundle:Products')->findOneById($id); $product->setIsActive($status); $em->flush(); $this->get('session')->getFlashBag()->add('info', "Zmieniono status produktu."); return new Response('1'); }
W kontrolerze zrobiłem sobie podgląd na wartosci parametrow i okazuje sie, ze zostały one sklejone. Dla statusu 0 i produktu o id=7 parametr $status przyjmuje wartosc: 022227. Parametr id przyjmuje zas wartosc 2222.
Jesli dokonam malej zmiany w postaci:
jsFormUrl = url.replace("1111", status + "," + id);
w kontrolerze parametr $status przyjmuje wartosc: 0,7.
Zatem istnieje mozliwosc zamiany stringa na tablice i pobranie jej ostatniego elementu, ktory bedzie w tym wypadku id produktu.
Czy ktos z Was zna mniej inwazyjny sposob, aby przekazac te 2 parametry do url'a via ajax i w kontrolerze pozbyc sie zbednego kodu?