我有一个News
个对象的列表。每条新闻都有startDate
和expireDate
。此外,每条新闻都有state
属性。
如果expireDate
为< date('now)
,则state
设置为0. state
时expireDate > date('now)
设置为1。
当我呈现列表时,对于state == 1
的新闻,我有一个切换开关(On&amp; Off)来激活或停用新闻(分别为state == 1
或state == 0
)。我无法正确地进行切换。
这是我的按钮和我的jQuery函数的html,它为用户点击的按钮提供了active
类:
//news.html.twig
{% if news.state == 1 %}
<div class="btn-group btn-toggle">
<button class="btn btn-xs btn-primary active">On</button>
<button class="btn btn-xs btn-default ">Off</button>
</div>
{% endif %}
<script type="text/javascript">
$('.btn-toggle').click(function() {
$(this).find('.btn').toggleClass('active');
if ($(this).find('.btn-primary').length > 0) {
$(this).find('.btn').toggleClass('btn-primary');
}
$(this).find('.btn').toggleClass('btn-default');
});
</script>
我需要在此处集成$.post
调用,以便在用户点击按钮时为新闻设置state
。
我想到这样的事情:
$.post('{{ path('set_news_state') }}', {id: 'news.id'}, function(response) {
if (response.code == 100 && response.success){
//do something
}
}, "json");
这些将是我的控制者:
/**
* @Route("/setNewsState/{id}", name = "set_news_state")
* @Method("POST")
**/
public function setNewsOn(Request $request, $id) {
if ($request->isXMLHttpRequest()) {
return new JsonResponse(array('data' => 'this is a json response'));
}
$repository = $this->getDoctrine()->getRepository('AppBundle:News');
$news = $repository->findOneById($id);
if ($news->getState() == 0) {
$news->setState(1);
} else {
$news->setState(0);
}
$em = $this->getDoctrine()->getManager();
$em->persist($news);
$em->flush();
return new Response();
}
如何在我已经工作的jQuery函数中集成$.post
调用?
谢谢!
答案 0 :(得分:1)
你走在正确的轨道上,但它比你拥有的更简单。如果您发布到正确的URL,则可以从路由参数中获取新实体的ID。
// news.html.twig
// You can supply a second argument to path() to fill in the route params.
$.post("{{ path('set_news_state', {'id': news.id}) }}").done(function(response) {
if (response.status === 'ok') {
// ...
}
});
然后在您的控制器中
/**
* @Route("/setNewsState/{id}", name="set_news_state")
* @Method("POST")
**/
public function setNewsOn($id) {
$em = $this->getDoctrine()->getManager();
$news= $em->find('AppBundle:News', $id);
if ($news->getState() == 0) {
$news->setState(1);
} else {
$news->setState(0);
}
$em->persist($news);
$em->flush();
return new JsonResponse(array(
'status' => 'ok'
));
}
$news = $repository->findOneById($id);
是不必要的,因为find()
默认搜索ID(嗯,不是,它默认搜索主键,但这几乎总是ID)。
news = $repository->find($id);
是一样的,但更清洁。