Witam.
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=""> ...
{% if entity.isActive == 1 %}
<a href="#" class="js-isActive" data-action="1" data-id="{{ entity.id }}"><img src="{{ asset(iconsPath) }}/{{ iconTickYES }}" title="Aktywny" alt="Aktywny" /></a>{% elseif entity.isActive == 0 %}
<a href="#" class="js-isActive" data-action="0" data-id="{{ entity.id }}"><img src="{{ asset(iconsPath) }}/{{ iconTickNO }}" title="Nieaktywny" alt="Nieaktywny" /></a>...
(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);
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?