0

0

Laravel怎么在Blade中使用JSON数据_Laravel @json指令与Vue组件传值技巧【手册】

冰火之心

冰火之心

发布时间:2026-01-18 12:10:03

|

369人浏览过

|

来源于php中文网

原创

Blade 中应使用 @json 指令而非 json_encode() 输出 JSON,因其自动处理转义、类型校验和 XSS 防御,输出合法 JSON 字符串;Vue 组件推荐通过 props 接收,如 。

laravel怎么在blade中使用json数据_laravel @json指令与vue组件传值技巧【手册】

Blade 中直接输出 JSON 数据用 @json,不是 json_encode() 手动转义

很多人在 Blade 里写 {{ json_encode($data) }},结果引号被 HTML 转义成 ",JS 解析失败。Laravel 5.5+ 内置的 @json 指令会自动处理转义、类型校验和 XSS 防御,且输出是合法 JSON 字符串(带双引号包裹),可直接赋值给 JS 变量。

常见错误现象:{{ json_encode($user) }} 在页面源码中显示为 {"id":1,"name":"Tom"},JS 里 const user = {{ json_encode($user) }}; 会语法报错。

  • @json($user) 输出: {"id":1,"name":"Tom"}(安全、合法、可直接用)
  • 支持嵌套结构、null、布尔值、数字,不支持资源(如 resource 对象需先 toArray()
  • 若变量可能为 null,建议加默认值:@json($user ?? [])

Vue 组件接收 Blade 传入的 JSON 数据,优先用 props 而非全局变量

@json 结果塞进 data- 属性再用 JS 读取,容易出竞态或类型丢失;更稳妥的方式是让 Vue 组件声明 props,Blade 渲染时直接绑定。

使用场景:初始化一个带用户信息的 UserProfile.vue 组件,数据来自服务端查询,无需额外 API 请求。

AI at Meta
AI at Meta

Facebook 旗下的AI研究平台

下载

立即学习前端免费学习笔记(深入)”;

  • 组件定义需明确 prop 类型:
    export default {
      props: {
        initialUser: {
          type: Object,
          required: true,
          default: () => ({})
        }
      }
    }
  • Blade 中调用:(注意冒号触发 Vue 的响应式绑定)
  • 避免写成 :initial-user="{{ json_encode($user) }}" —— 会因 HTML 转义导致解析失败
  • 如果用的是非 `` 方式(如普通 `
    `),可用 data 属性 + JSON.parse(),但必须确保属性值未被 HTML 编码
    const el = document.getElementById('app')
    const user = JSON.parse(el.dataset.initialUser)

    @jsonv-html 混用会破坏 JSON 安全性

    有人为了“动态插入”,把 @json 结果拼进字符串再用 v-html 渲染,比如:v-html="'var user = ' + @json($user)"。这不仅多余,还会绕过 Vue 的模板编译机制,导致 XSS 风险(尤其当 $user 含用户可控字段时)。

    • @json 本身已做 HTML 实体转义,但仅保障 JSON 字符串合法性;一旦用 v-html 插入脚本上下文,就失去保护
    • 所有服务端数据应走 propsdata 属性,由 Vue 自身解析,不拼接字符串
    • 若需动态生成 JS 代码(极少见),改用 Laravel Mix 的 Webpack 提供环境变量或预编译配置,而非运行时拼接

    复杂嵌套对象传给 Vue 时,注意 Eloquent 关系加载与序列化控制

    直接传 @json($post) 看似简单,但如果 $post 带了未加载的关系(如 $post->author),序列化时会触发 N+1 查询;若用了 HiddenCasts,也可能和前端预期不符。

    • 显式加载所需关系:$post->load('author:id,name,avatar'),避免传整个模型实例
    • toArray()only() 显式筛选字段:@json($post->only(['id', 'title', 'content']))
    • 若模型有 $casts(如 'options' => 'array'),@json 会自动处理;但自定义 toArray() 方法必须返回纯数组,不能返回集合或对象
    • 时间字段默认转为字符串,无需额外格式化 —— 除非你覆盖了 serializeDate() 方法
    Vue 初始化时拿到的数据,是否真正“响应式”取决于你有没有在 data()setup() 中正确解构或引用它。直接把 @json 当字符串用没问题,但把它当成“已经响应式”的源头,就容易忽略 Vue 的响应式限制。

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

316

2024.04.09

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

274

2024.04.09

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

369

2024.04.09

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

370

2024.04.10

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

81

2025.08.05

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

64

2025.08.05

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

67

2025.08.05

json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

412

2023.08.07

高德地图升级方法汇总
高德地图升级方法汇总

本专题整合了高德地图升级相关教程,阅读专题下面的文章了解更多详细内容。

43

2026.01.16

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Vue 教程
Vue 教程

共42课时 | 6.7万人学习

Vue3.x 工具篇--十天技能课堂
Vue3.x 工具篇--十天技能课堂

共26课时 | 1.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号