Symfony 2 — Обновление базы данных по клику

Я пытаюсь обновить значение «архива» базы данных, когда нажимаю на флажок. После поиска сайта и гугла мне удалось это сделать.
Однако, добавив вторую статью, она работает только для первой. Если у вас когда-нибудь появятся идеи, буду благодарен!
Спасибо
Я установил fosjsroutingbundle.

Вот мой контроллер:

 public function archiveAction($id, Request $request)
{

if ($request->isXmlHttpRequest()) {

$em = $this->getDoctrine()->getManager();
$glasse = $em->getRepository('SosMontagesBundle:Glasse')->find($id);
$glasseArchiveStat = $glasse->getArchive();

if ($glasseArchiveStat == false) {
$glasse->setArchive(true);
$em->flush();
} else {
$glasse->setArchive(false);
$em->flush();
}

return new Response('d');

}}

Мой маршрут:

sos_montage_archive:
path:    /admin/archive/{id}
defaults: { _controller: SosMontagesBundle:Admin:archive }
requirements:
id: \d+
options:
expose: true

Мой взгляд :

{% extends '@SosMontages/layout.html.twig' %}

{% block content%}

<div class="col-md-6 col-md-offset-3">
<h2>Liste des lunettes</h2>
<table class="table table-striped">
<thead>
<tr>
<th>Id</th>
<th>Marque - Model</th>
<th>Description</th>
<th>Archive</th>
<th>Ordre</th>
<th>Actions</th>

</tr>
</thead>
<tbody>
{% for article in pagination %}
<tr {% if loop.index is odd %}class="color"{% endif %}>
<td>{{ article.id }}</td>
<td>{{ article.name ~ ' - ' ~ article.brand }}</td>
<td>{{ article.content }}</td>
{% if article.archive == false %}
<td><input type="checkbox" name="{{ article.id }}" id="archive"></td>
{% else %}
<td><input type="checkbox" name="{{ article.id }}" id="archive" checked></td>
{% endif %}
<td></td>
<td><a href=""><i class="fa fa-pencil fa-2x" aria-hidden="true"></i></a>
<a href=""><i class="fa fa-trash-o fa-2x" aria-hidden="true"></i></a></td>

</tr>
{% endfor %}

</tbody>
</table>
<div class="navigation">
{{ knp_pagination_render(pagination) }}
</div>
</div>

{% endblock%}
{% block javascript%}

<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="{{ path('fos_js_routing_js', { callback: 'fos.Router.setData' }) }}"></script>
<script>
$(document).ready(function () {
$("#archive").click(function () {

var id = $("#archive").attr('name');var DATA = 'sentValue=' + id;
$.ajax({
type: "POST",
url: Routing.generate('sos_montage_archive', { id: id }),
data: DATA,
cache: false,
success: function (data) {
alert("database has been updated");

}
});
});

});

</script>

{% endblock%}

-2

Решение

Ваш приемник кликов на вашем флажке может быть неправильным. Вы должны использовать прослушиватель изменений, пока он установлен. Измените свою функцию щелчка в js, чтобы изменить:

$('#archive').change(function() {
if($(this).is(":checked")) {
//'checked' event code
return;
}
//'unchecked' event code
});

Однако у вас также есть два флажка и только один идентификатор. Это может создать странные ошибки. Изменение ваших идентификаторов на # archive1 и # archive2 может исправить ваш код.

0

Другие решения

Вы должны исправить свой HTML и дифференцировать селектор #archive id.

Вы можете сделать это, используя loop.index, например:

id="archive{{ loop.index }}" //output : archive1, archive2...

Twig Doc:
http://twig.sensiolabs.org/doc/2.x/tags/for.html#the-loop-variable

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector