eltharin / ajaxresponser
AjaxResponser Bundle for symfony
V1.5.1
2024-03-18 10:22 UTC
README
安装
- 使用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。