在Sonata/Symfony2中使用AJAX调用而不是路由
我使用索纳塔是为了满足项目中的特定需求 事实上,我制作了一个JS接口(使用ExtJS),它只有一个页面,每个按钮只调用一个AJAX请求来显示一些内容。因此,永远不会重新加载页面。URL类似于www.blob.com/blob 一个按钮应该通过AJAX调用调用Sonata管理界面。 它可以工作,管理界面显示在一个ExtJS容器中 但是,当我点击管理界面中的一个按钮(如add按钮)时,它会将我重定向到Sonata管理员URL,如www.blob.com/Admin/dashboard/list/add等 因此,我希望Sonata管理界面中的所有按钮都使用AJAX,而不是刷新页面 我找到了这个很好的答案。但我几乎不能理解它,而且它似乎只适合特定的需要 有人知道一个“容易”处理的解决方案吗。 因为目前我看到的唯一解决方案是编辑我的包(~50)中的所有AdminClass和控制器在Sonata/Symfony2中使用AJAX调用而不是路由,ajax,symfony,sonata-admin,Ajax,Symfony,Sonata Admin,我使用索纳塔是为了满足项目中的特定需求 事实上,我制作了一个JS接口(使用ExtJS),它只有一个页面,每个按钮只调用一个AJAX请求来显示一些内容。因此,永远不会重新加载页面。URL类似于www.blob.com/blob 一个按钮应该通过AJAX调用调用Sonata管理界面。 它可以工作,管理界面显示在一个ExtJS容器中 但是,当我点击管理界面中的一个按钮(如add按钮)时,它会将我重定向到Sonata管理员URL,如www.blob.com/Admin/dashboard/list/ad
谢谢,希望我已经尽可能清楚了。我想你可以在链接(
标记)上使用Javascript捕获所有点击事件,类sonata ba action
将在AJAX中处理
比如:
jQuery('a.sonata-ba-action').on('click', function (e) {
var url = jQuery(this).attr('href');
jQuery.get(url, function (data) {
jQuery('#yourContainer').html(data);
});
return false;
});
嗯,很有趣。我会去看看,如果能成功的话,那就太好了!嗯,看来我没能成功。我试图添加一个警报(“ok”);在您的代码中,但没有显示任何内容,因此我猜该函数不会触发此a.sonata-ba-action的任何内容。顺便问一下,您确定a.sonata-ba-action是引用具有sonata-ba-action类的对象中包含的内容的正确方法吗?您还必须捕获所有表单提交按钮(我想你可以使用他们的名字,只使用Sonata Admin submit按钮来完成这项工作)。我向你提出了一个解决方案,但我已经不再这么做了。是的,好吧,我明白了,但这看起来很乏味。你的第一个解决方案看起来很有趣,但暂时不起作用,不知道它是否会:(.也许你可以使用
来保持管理员界面的答案,但它会改变什么?路由仍将由Sonata处理。