eltharin/ajaxresponser

AjaxResponser Bundle for symfony

安装: 35

依赖: 0

建议者: 0

安全: 0

星标: 1

关注者: 1

分支: 0

类型:symfony-bundle

V1.5.1 2024-03-18 10:22 UTC

This package is auto-updated.

Last update: 2024-09-18 11:18:29 UTC


README

Latest Stable Version Total Downloads Latest Unstable Version License

安装

  • 使用composer安装此包
composer require eltharin/ajaxresponser

AjaxResponser Bundle是什么?

AjaxResponser是一个包,允许路由根据请求响应HTML或Json。

例如:一个删除请求以HTML响应,将返回带有提示信息的HTML页面(或重定向),而通过AJAX调用同一页面,将返回一个包含结果的Json和提示信息。

使用方法

只需将AjaxOrNot属性添加到您的路由中

use Eltharin\AjaxResponserBundle\Annotations\AjaxCallOrNot;

...

#[Route(path: '/test-ajax-responser', name: 'app_test_ajax_responser')]
#[AjaxCallOrNot]
public function test_ajax_responser(): Response
{
    //-- Actions

    $this->addFlash('success', 'all is good');

    return $this->redirectToRoute('app_home');
}

如果您访问/test-ajax-responser,您将被重定向到主页,并显示所有操作正常的消息

但是,如果您通过带有值 XMLHttpRequest 的header X-Requested-With调用同一页面,

您将获得一个Json响应

{
    "statusCode": 302,
    "content": "<!DOCTYPE html>\n<html>\n    <head>\n        <meta charset=\"UTF-8\">\n        <title>Hello HomeController!<\/title>\n        <link rel=\"icon\" href=\"data:image\/svg+xml,<svg xmlns=%22http:\/\/www.w3.org\/2000\/svg%22 viewBox=%220 0 128 128%22><text y=%221.2em%22 font-size=%2296%22>\u26ab\ufe0f<\/text><\/svg>\">\n                \n                    <\/head>\n    <body>\n    <fieldset class=\"messageContainer\">\n        <legend>Flash Messages<\/legend>\n\n            <\/fieldset>\n        <style>\n    .example-wrapper { margin: 1em auto; max-width: 800px; width: 95%; font: 18px\/1.5 sans-serif; }\n    .example-wrapper code { background: #F5F5F5; padding: 2px 6px; }\n<\/style>\n\n<div class=\"example-wrapper\">\n    <h1>Hello HomeController! \u2705<\/h1>\n\n    This friendly message is coming from:\n    <ul>\n        <li>Your controller at <code><a href=\"file:\/\/D:\/laragon\/www\/testbundles\/src\/Controller\/HomeController.php#L0\">src\/Controller\/HomeController.php<\/a><\/code><\/li>\n        <li>Your template at <code><a href=\"file:\/\/D:\/laragon\/www\/testbundles\/templates\/home\/index.html.twig#L0\">templates\/home\/index.html.twig<\/a><\/code><\/li>\n    <\/ul>\n<\/div>\n\n    <script>\n        window.addEventListener(\"DOMContentLoaded\", (event) => {\n            Flashes.init('.messageContainer');\n        });\n    <\/script>\n    <\/body>\n<\/html>\n",
    "msgs": {
        "success": [
            "all is good"
       ]
    },
    "redirectUrl": "\/home"
}

您将得到

  • statusCode : 原始HTTP返回代码,这里为重定向的302
  • content : 重定向后返回的内容
  • msgs : 提示信息
  • redirectUrl : 生成内容的URL

获取重定向后的内容可以避免您进行另一个AJAX调用以更新实际页面

例如:您有一个显示多个项目的页面,您希望删除其中一个项目,可以使用删除按钮,路由执行删除操作并将您重定向到项目页面,因此您可以直接替换HTML。

您可以通过将getRedirectContent参数设置为false来禁用获取此内容

use Eltharin\AjaxResponserBundle\Annotations\AjaxCallOrNot;

...

#[Route(path: '/test-ajax-responser', name: 'app_test_ajax_responser')]
#[AjaxCallOrNot(getRedirectContent: false)]
public function test_ajax_responser(): Response
{
    //-- Actions

    $this->addFlash('success', 'all is good');

    return $this->redirectToRoute('app_home');
}

现在您有了重定向的HTML。