当前位置: 首页 > news >正文

PHP 与 Vue.js 结合的前后端分离架构

PHP 与 Vue.js 结合是构建现代 Web 应用的流行技术栈,通常采用 前后端分离架构。以下是关键要点和推荐实现方案:


一、技术栈组合

角色技术选项
后端 (PHP)Laravel (推荐)、Symfony、CodeIgniter
前端 (Vue)Vue 2/3、Vue Router、Pinia/Vuex、Vite
通信协议RESTful API 或 GraphQL
构建工具Vite (推荐) 或 Webpack

二、两种整合方式

1. 完全分离(主流推荐)
  • 后端 PHP:仅提供 API 接口(如 Laravel 的 api.php 路由)。

  • 前端 Vue:独立 SPA 应用,通过 AJAX 调用 API。

  • 优势:前后端独立开发部署,易扩展(如移动端复用 API)。

  • 部署

    • PHP 部署在 api.domain.com

    • Vue 部署在静态服务器(如 Nginx / CDN)

2. 混合渲染(渐进式整合)
  • 场景:旧 PHP 项目逐步引入 Vue。

  • 方式

    • PHP 输出基础 HTML 模板(如 Laravel Blade)。

    • 在指定 DOM 节点挂载 Vue 组件:

      php

      <!-- Blade 模板 -->
      <div id="app"><!-- Vue 将接管这里 --></div>
      <script src="{{ asset('js/vue-app.js') }}"></script>

三、工作流程示例(Laravel + Vue 3)

后端准备(Laravel API)
  1. 创建 API 路由

    php

    // routes/api.php
    use App\Http\Controllers\UserController;
    Route::get('/users', [UserController::class, 'index']);
  2. 控制器返回 JSON

    php

    // app/Http/Controllers/UserController.php
    public function index() {return response()->json(['users' => User::all()]);
    }
前端开发(Vue 3)
  1. 创建 Vue 项目(独立目录):

    bash

    npm create vue@latest
  2. 调用 API(使用 Axios):

    vue

    <!-- src/views/UserList.vue -->
    <script setup>
    import { ref } from 'vue';
    import axios from 'axios';const users = ref([]);
    axios.get('https://api.yoursite.com/users').then(response => users.value = response.data.users);
    </script><template><ul><li v-for="user in users" :key="user.id">{{ user.name }}</li></ul>
    </template>

四、关键配置项

跨域问题(CORS)
  • Laravel 解决方案:安装 fruitcake/laravel-cors 包并配置:

    php

    // config/cors.php
    'paths' => ['api/*'],
    'allowed_origins' => ['https://your-vue-domain.com'],
认证机制
  • 推荐:JWT(JSON Web Tokens)

    • PHP 库:php-open-source-saver/jwt-auth

    • Vue 端:Axios 拦截器添加 Authorization 头


五、优化建议

  1. API 文档:使用 Swagger(Laravel 包:darkaonline/l5-swagger)。

  2. 状态管理:复杂应用用 Pinia 替代 Vuex。

  3. SSR 需求:用 Nuxt.js 替代 Vue(PHP 仍提供 API)。

  4. 部署加速

    • Vue:npm run build 生成静态文件托管至 CDN。

    • PHP:启用 OpCache,使用队列异步处理任务。


六、模板项目推荐

  1. Laravel Vue SPA(一体化配置)

  2. Vite + Vue + PHP Starter


七、常见问题

  • SEO 问题:Vue SPA 需配合 Prerender 或迁移至 Nuxt.js。

  • CSRF 保护:混合渲染时在 Blade 模板中添加:

    html

    <meta name="csrf-token" content="{{ csrf_token() }}">

    Vue 中通过 Axios 读取:

    javascript

    axios.defaults.headers.common['X-CSRF-TOKEN'] = document.querySelector('meta[name="csrf-token"]').content;

通过这种架构,PHP 专注于业务逻辑与数据安全,Vue 负责交互体验,两者通过清晰 API 边界协作,兼顾开发效率与应用性能。

http://www.lryc.cn/news/598604.html

相关文章:

  • 工具分享02 | Python批量文件重命名工具
  • 电商接口什么意思?
  • 数据所有权与用益权分离:数字经济时代的权利博弈与“商业机遇”
  • Claude Code是如何做上下文工程的?
  • Maven Scope标签:解锁Java项目依赖管理的秘密武器
  • [嵌入式embed]ST官网-根据指定固件名下载固件库-STSWSTM32054[STM32F10x_StdPeriph_Lib_V3.5.0]
  • 使用maven-shade-plugin解决依赖版本冲突
  • RCLAMP0504S.TCT 升特半导体TVS二极管 无损传输+军工防护+纳米护甲 ESD防护芯片
  • 陕西地区特种作业操作证考试题库及答案(登高架设作业)
  • Product Hunt 每日热榜 | 2025-07-24
  • 2025年人形机器人动捕技术研讨会于7月31日在京召开
  • 火语言 RPA 在日常运维中的实践
  • ESP32使用 vscode IDF 创建项目到烧录运行全过程
  • 优选算法:移动零
  • 使用ffmpeg转码h265后mac默认播放器不支持问题
  • Mac电脑使用IDEA启动服务后,报service异常
  • 从零构建 Node20+pnpm+pm2 环境镜像:基于 Dockerfile 的两种方案及持久化配置指南
  • 开源Qwen凌晨暴击闭源Claude!刷新AI编程SOTA,支持1M上下文
  • Vue3实现视频播放弹窗组件,支持全屏播放,音量控制,进度条自定义样式,适配浏览器小窗播放,视频大小自适配,缓冲loading,代码复制即用
  • 合泰单片机怎么样
  • idea监控本地堆栈
  • Linux系统监控模块之Zabbix7添加监控主机
  • 生成式人工智能展望报告-欧盟-03-经济影响
  • 第一二章笔记
  • 同步时钟系统提升仓库自动化水平
  • Opentrons 模块化平台与AI技术助力智能移液创新,赋能AAW™自动化工作站
  • 爬虫逆向--Day12--DrissionPage案例分析【小某书评价数据某东评价数据】
  • 2025年区块链安全威胁全景:新兴漏洞、攻击向量与防护策略深度解析
  • 常见半导体的介电常数
  • gitlab使用 备份恢复 全量迁移