Javascript -> symfony 控制器请求

Posted

技术标签:

【中文标题】Javascript -> symfony 控制器请求【英文标题】:Javascript -> symfony controller request 【发布时间】:2021-06-16 03:39:58 【问题描述】:

我有 HomeController.php 的功能:

public function foo(Request $request) : Response
    
        do something
    

我也有 routes.yaml 来访问这个控制器

app_foo:
    path: /foo
    controller: App\Controller\HomeController::foo

问题是,我如何通过单击 javascript 中动态生成的链接来执行 foo()。 我尝试了什么:

<a href=" url(app_foo) "> link </a>

$(document).on('click', 'a', function () 
$.ajax(
    type: "POST",
    url: "/app_foo",

    dataType: "json",
    success: function(response) 
        console.log(response);
    
);

【问题讨论】:

第一种方法什么也没做,但第二种方法用 ajax 返回 500 我敢打赌它什么都没做这不是真的。我敢打赌它会输出一些 html。您可能的意思是它输出的 HTML 没有有用 - 但我们仍然需要知道 HTML 是什么样子(源代码,而不是浏览器如何呈现它)如果你想让我们解释为什么它没有做任何有用的事情。 【参考方案1】:

您应该能够使用在函数回调中收到的event 对象并调用event.preventDefault(); 来停止浏览器的本机点击处理程序,还可以使用$(this).attr('href') 来获取URL 的href 部分,这样你没有硬编码它。我没有尝试过这段代码,但它通常应该可以工作:

        $(document).on('click', 'a', function (event) 
            event.preventDefault();
            $.ajax(
                type: "POST",
                url: $(this).attr('href'),

                dataType: "json",
                success: function (response) 
                    console.log(response);
                
            );
        );

【讨论】:

【参考方案2】:

如果你想在 JS 中使用你的路由,你需要用FOSJsRoutingBundle 暴露它 您的路线将变为:

app_foo:
    path: /foo
    controller: App\Controller\HomeController::foo
    options:
        expose: true

在你的模板(或父模板)中添加

<script src=" asset('bundles/fosjsrouting/js/router.js') "></script>
<script src=" path('fos_js_routing_js',  callback: 'fos.Router.setData' ) "></script>

还有你的javascript:

$(document).on('click', 'a', function () 
$.ajax(
    type: "POST",
    url: Routing.generate("app_foo"),

    dataType: "json",
    success: function(response) 
        console.log(response);
    
);

如果你使用 webpack.encore 生成 JS,告诉我,它有点不同:)

【讨论】:

以上是关于Javascript -> symfony 控制器请求的主要内容,如果未能解决你的问题,请参考以下文章

Symfony2,将 css、javascript、图像放在哪里

Symfony & Sonata:如何将 javascript 添加到实体管理表单?

javascript 如何将图片余烬上传到symfony

CSS 和 javascript 在 Symfony 项目中不起作用

Symfony2 Assetic + Twig 模板 JavaScript 继承

symfony2 中的 Ajax 表单提交,为没有 javascript 的用户提供优雅的降级