Symfony 6.4 怎么创建地图功能?百度地图API

老芳君_2973

老芳君_2973

2026-08-08

201人浏览

原创

symfony 6.4 集成百度地图需前端调用 js api 渲染地图,后端仅提供坐标、地理编码等接口;ak 必须通过服务配置注入、禁止硬编码,sk 须严格保密并用 symfony secrets 管理,同时配置 csp 和 referer 白名单确保安全。

symfony 6.4 怎么创建地图功能?百度地图api

要在 Symfony 6.4 项目中集成百度地图 API 实现地图功能,必须明确:Symfony 本身不提供地图渲染能力,需通过前端 JavaScript 调用百度地图 JS API,后端仅负责提供坐标数据、地址解析接口或安全签名逻辑。直接在 PHP 层“创建地图”是概念错误——地图渲染完全发生在浏览器中。

前端页面嵌入百度地图 JS API

第一步:前往 https://lbsyun.baidu.com/ 注册账号,进入控制台 → 应用管理 → 创建应用,获取 AK(Access Key)。注意勾选“Web服务API”和“JavaScript API”两个服务类型,否则加载地图时会报错 Illegal Request: Referer not allowed。

第二步:在 Symfony 模板文件(如 templates/map/index.html.twig)中引入百度地图 JS SDK:

<script src="https://api.map.baidu.com/api?v=3.0&ak=%E4%BD%A0%E7%9A%84AK"></script>

第三步:添加一个 DOM 容器,并初始化地图实例:

<div id="map" style="width:100%;height:500px;"></div><br><script><br>  const map = new BMapGL.Map("map");<br>  const point = new BMapGL.Point(116.404, 39.915); // 北京天安门坐标<br>  map.centerAndZoom(point, 15);<br></script>

这一步操作起来很简单,直接把 script 标签贴进 Twig 模板 body 尾部即可。但注意:若使用 Symfony 的 Webpack Encore 构建流程,不应将 <script src="..."></script> 写死在模板里,而应通过 import 方式动态加载,避免 CSP 策略拦截。

后端提供地理编码与逆编码接口

百度地图前端 SDK 不允许直接调用其地理编码(地址→坐标)或逆编码(坐标→地址)接口,因涉及 AK 鉴权且需 Referer 白名单校验;这些请求必须由后端代理,否则浏览器会触发跨域拒绝或签名失败。

方法一:用 Symfony HttpClient 调用百度地图 Web 服务 API

在控制器中注入 Symfony\Contracts\HttpClient\HttpClientInterface,构造带签名的请求 URL:

百度要求对请求参数按字典序拼接后 + SK(Server Key)再做 MD5,例如:
address=北京市海淀区中关村&output=json&ak=YOUR_AK → 拼上 &callback=1234567890(可选)→ 加密前字符串末尾追加 sk=YOUR_SK → md5(拼接串) → 得到 sn 参数。

关键点:【SK 必须严格保密,绝不可暴露在前端或 .env.local 中明文写入】。建议将 SK 存于服务器环境变量(如 Linux 的 /etc/environment),PHP 进程启动时读取,或通过 Symfony Secrets 管理(php bin/console secrets:set BAIDU_MAP_SK)。

方法二:封装为独立服务类(推荐)

百度文档解析vlm-parser
百度文档解析vlm-parser

调用百度PaddleOCR‑VL大模型API,支持PDF、Word、PPT、图片等多格式文档解析,精准识别印刷体、手写体、表格、公式、图表、印章等复杂元素,支持100+语言,可处理不规则布局和跨页长文档。触发词:文档解析、VLM解析、大模型OCR、PaddleOCR、多模态文档、手写识别、公式识别、复杂版面。

下载

创建 src/Service/BaiduMapService.php,封装地理编码逻辑:

public function geocode(string $address): array<br>{<br>  $params = ['address' => $address, 'output' => 'json', 'ak' => $this->ak];<br>  $sn = $this->generateSn($params);<br>  $url = 'https://api.map.baidu.com/geocoding/v3/?' . http_build_query($params) . '&sn=' . $sn;<br>  $response = $this->client->request('GET', $url);<br>  return $response->toArray();<br>}

其中 generateSn() 必须严格按百度文档实现:参数键名升序排列 → 拼接 key=value 对(无空格、无编码)→ 追加 sk=xxx → UTF-8 编码后 MD5 → 小写十六进制字符串。

安全加载地图并防止 AK 泄露

第一步:禁用模板中硬编码 AK

不要在 Twig 中写 ak=xxxxx。改用 Symfony 的资产系统注入运行时参数:

在控制器中传入 'baidu_ak' => $this->getParameter('baidu.map.ak'),该参数从 config/services.yaml 的 parameters: 下定义,且 【不得写入 .env 文件】 —— 因为 .env 可能被意外提交至 Git 或被 Web 服务器错误暴露。

第二步:配置 Nginx/Apache 限制百度 API 域名 Referer

若使用反向代理,应在 Web 服务器层设置 add_header Referer "https://yourdomain.com"; 并在百度控制台白名单中填入 https://yourdomain.com/*,否则前端 JS 初始化地图时会返回 AK非法 错误。

第三步:启用 CSP 头防止外链脚本注入

在 config/packages/security.yaml 中配置:

csp:<br>  default-src 'self';<br>  script-src 'self' 'unsafe-inline' https://api.map.baidu.com;<br>  img-src 'self' data: https:;<br>  connect-src 'self' https://api.map.baidu.com;

这一步必须做,否则现代浏览器会拦截百度地图 JS 脚本加载。

大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!

相关文章

百度地图
百度地图

百度地图作为新一代人工智能地图,服务覆盖全球200+城市及国家。导航可信赖、语音交互更简单、数据丰富更贴心的百度地图,致力于为用户提供更准确、更丰富、更易用的出行服务。有需要的小伙伴快来保存下载体验吧!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
PHP Symfony框架
PHP Symfony框架

本专题专注于PHP主流框架Symfony的学习与应用,系统讲解路由与控制器、依赖注入、ORM数据操作、模板引擎、表单与验证、安全认证及API开发等核心内容。通过企业管理系统、内容管理平台与电商后台等实战案例,帮助学员全面掌握Symfony在企业级应用开发中的实践技能。

2025.09.11

5377

17

Linux 新手先学哪些命令
Linux 新手先学哪些命令

Linux新手命令专题汇集终端基础、文件目录操作、文本查看、软件安装和权限管理等入门文章,帮助按实际任务练习常用命令并建立命令行操作习惯。

2026.10.15

0

20

MySQL 忘记密码怎么办
MySQL 忘记密码怎么办

MySQL忘记密码专题汇集不同版本与系统下的root密码重置方法,覆盖MySQL 5.7、8.0、Mac、Linux及本地集成环境,并提示恢复权限与重新登录的检查步骤。

2026.10.15

0

18

Vue.js 中 ref 和 reactive 的区别
Vue.js 中 ref 和 reactive 的区别

Vue.js中ref和reactive的区别专题汇集两种响应式API的定义、访问方式、对象解构、侦听与性能取舍等文章,帮助结合实际状态类型选择合适写法。

2026.10.15

0

20

VS Code 怎么配置开发环境
VS Code 怎么配置开发环境

VS Code开发环境专题汇集编辑器安装、语言扩展、编译器、解释器、终端和调试配置文章,覆盖Java、Python、C++和PHP等常见语言的入门设置。

2026.10.15

0

18

C++ 开发环境怎么搭建
C++ 开发环境怎么搭建

C++开发环境专题汇集Windows、Linux下的编译器与IDE安装配置教程,涵盖GCC、Clang、Visual Studio、CLion和VS Code,以及编译运行首个程序的步骤。

2026.10.15

0

19

Python 虚拟环境是什么
Python 虚拟环境是什么

Python虚拟环境专题介绍项目依赖隔离的作用,汇集venv与uv创建、激活、退出及解释器切换的相关文章,并覆盖Windows、Linux和VS Code中的常见配置问题。

2026.10.15

0

15

Python 怎么安装并配置环境变量
Python 怎么安装并配置环境变量

Python安装与环境变量配置专题汇集Windows、macOS和Linux的安装步骤、PATH设置、pip配置及常见报错排查文章,帮助完成解释器安装并验证命令行可以正常运行。

2026.10.15

0

15

PHP 连接 MySQL 失败怎么办
PHP 连接 MySQL 失败怎么办

PHP连接MySQL失败专题汇集PDO与MySQLi扩展配置、账号权限、主机端口、套接字和认证方式等排查文章,覆盖连接报错、密码变更与容器环境配置,帮助按错误提示定位原因并修复。

2026.10.15

0

18

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Symfony 官方文档
Symfony 官方文档

共0课时 | 0人学习

Composer手册
Composer手册

共0课时 | 0人学习

Symfony5【从0开始开发博客系统】
Symfony5【从0开始开发博客系统】

共120课时 | 15.6万人学习