拓冰建站拓冰建站
首页 / 资讯中心 / 正文

使用 Laravel 5.1 + PHP 7 构建 SQL Server 待办事项应用:Myboard 实战解析

示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载导读Myboard 是 sql-server-samples 仓库中一个完整的开源待办看板to-do boardWeb 应用它演示了如何使用 PHP 7 Laravel 5.1 框架对接 Microsoft SQL Server 数据库。本文以该示例的 README 为主线结合仓库内的路由、模型、迁移与控制器源码完整讲解从环境准备、数据库配置、迁移建表到启动运行的整个过程并深入剖析其用户认证与待办 CRUD 的底层实现帮助你掌握在 Ubuntu 环境下让 Laravel 应用读写 SQL Server 的完整技术方案。Myboard 欢迎页顶部导航提供注册Register与登录Sign In入口是整套用户认证流程的起点。注册新用户页面收集姓名、邮箱、密码等信息对应源码中的用户注册与认证逻辑。项目概览Myboard 的核心功能与技术栈Myboard 是一个面向个人的待办事项管理应用围绕两个基础业务能力设计创建待办事项Create todo action items用户可以随时新增一条待办记录标记状态Mark Status用户可以切换某条待办的完成/未完成状态实现任务闭环。其技术栈在 README 中明确列出组件版本/说明PHP7操作系统Ubuntu 16.04Web 框架Laravel 5.1前端样式Twitter Bootstrap 3数据库驱动Microsoft PHP SQL Server Driver底层驱动Microsoft ODBC SQL Server Driver这个组合正是该示例的核心价值所在它证明了在 LinuxUbuntu环境下通过微软官方的 PHP SQL Server 驱动 ODBC 驱动PHP 应用可以像使用 MySQL 一样无缝读写 SQL Server / Azure SQL Database。环境准备Composer、PHP 与 SQL Server 驱动按照 README 的安装指南运行 Myboard 前需要准备以下前置组件ComposerPHP 的依赖管理器用于拉取 Laravel 框架及第三方包PHP 7应用运行时的解释器示例基于 PHP 7.0 编写PHP Connector for SQL Serverpdo_sqlsrv / sqlsrv 扩展让 PHP 直接通过 PDO 访问 SQL Server 的关键扩展Laravel 的sqlsrv连接驱动正是依赖它Apache可选的 Web 服务器用于将应用部署为常驻站点开发阶段可先用内置服务器Mcrypt 和 mbstring 扩展Laravel 5.1 的加密与多字节字符串处理依赖这两个 PHP 扩展。需要特别强调的是PHP 7 环境下必须安装与 PHP 版本匹配的微软 SQL Server 驱动否则 Laravel 在建立sqlsrv连接时会因缺少PDO_SQLSRV扩展而直接失败。驱动安装完成后可通过php -m | grep -i sqlsrv验证扩展是否加载成功。安装依赖Composer 安装 Laravel 5.1在项目根目录执行依赖安装README 中的命令假设已进入todo目录在本仓库中即 samples/development-frameworks/laravel 目录本身cd samples/development-frameworks/laravel composer install依赖清单记录在 composer.json 中require: { laravel/framework: 5.1.*, laravelcollective/html: ~5.0 }, require-dev: { fzaninotto/faker: ~1.4, mockery/mockery: 0.9.*, phpunit/phpunit: ~4.0, phpspec/phpspec: ~2.1 }其中laravel/framework锁定在 5.1.x 版本线laravelcollective/html提供表单与 HTML 生成辅助函数用于登录、注册页面的表单构建。composer install完成后脚本钩子会自动执行php artisan clear-compiled与php artisan optimize完成框架编译与优化见 composer.json。数据库配置让 Laravel 5.1 连接 SQL Server配置config/database.php这是接入 SQL Server 最核心的一步。README 给出了sqlsrv连接的配置片段而在仓库实际的 config/database.php 中可以看到完整实现sqlsrv [ driver sqlsrv, host 10.211.55.5, database env(DB_DATABASE, demotekdb), username env(DB_USERNAME, sa), password env(DB_PASSWORD, channelV1), prefix , ],各参数含义与取值说明参数说明推荐取值driver连接驱动类型固定为sqlsrvsqlsrvhostSQL Server 实例地址IP 或主机名命名实例可写host\instance替换为你的服务器地址database目标数据库名通过env(DB_DATABASE, ...)覆盖username数据库登录账号示例默认sapassword数据库登录密码通过env(DB_PASSWORD, ...)覆盖prefix表名前缀默认空字符串值得关注的是源码中的默认连接声明config/database.phpdefault env(DB_CONNECTION, sqlsrv),也就是说应用默认数据库连接就是sqlsrv即使不配置DB_CONNECTION环境变量Laravel 的所有数据库操作Eloquent、迁移、查询构造器都会走 SQL Server。生产环境建议在.env中通过DB_DATABASE、DB_USERNAME、DB_PASSWORD注入真实凭据避免在代码中硬编码密码同时可通过环境变量DB_CONNECTIONsqlsrv显式声明连接。与 MySQL 等其他连接的对比同一个配置文件里还保留了sqlite、mysql、pgsql连接见 config/database.php证明 Laravel 的多数据库抽象能力切换default即可无缝切换数据库后端而业务代码零改动——这正是 Myboard 用来演示PHP 应用对接 SQL Server时最具说服力的架构特性。数据建模与迁移三条表结构配置好连接后需要运行数据库迁移来建表php artisan migrate chmod 777 -R storagechmod 777 -R storage用于确保 Laravel 的storage目录可写框架需要写入 session、日志与编译后的视图这是 Linux 环境下的常见权限处理。Myboard 共有三张迁移表全部由 Laravel 的 Schema Builder 生成可在 database/migrations 目录查看1.users用户表2014_10_12_000000_create_users_table.phpSchema::create(users, function (Blueprint $table) { $table-increments(id); $table-string(name); $table-string(email)-unique(); $table-string(password, 60); $table-rememberToken(); $table-timestamps(); });字段包括自增主键id、用户名、唯一邮箱Laravel 迁移会为unique()自动创建唯一索引、60 位密码哈希串对应 bcrypt 输出长度、remember_token记住我会话令牌以及created_at/updated_at时间戳。2.password_resets密码重置表2014_10_12_100000_create_password_resets_table.phpSchema::create(password_resets, function (Blueprint $table) { $table-string(email)-index(); $table-string(token)-index(); $table-timestamp(created_at); });为 Laravel 内置的密码重置功能提供存储email与token均建立索引以加速查找。3.todos待办表2015_05_31_072511_create_todos_table.phpSchema::create(todos, function (Blueprint $table) { $table-increments(id); $table-string(name); $table-unsignedInteger(user_id); $table-boolean(complete)-default(false); $table-timestamps(); });name存储待办内容user_id关联用户表业务上未显式声明外键约束但模型层强制按当前登录用户过滤complete为布尔完成标志默认false。Eloquent 模型Todo 与 User数据访问全部通过 Eloquent ORM 完成两个模型位于 app 目录。Todo 模型app/Todo.php声明了表名、可批量赋值字段与属性类型转换class Todo extends Model { protected $table todos; protected $fillable [ name, user_id, ]; protected $casts [ complete boolean, ]; }$fillable白名单机制防止**批量赋值mass assignment**漏洞——只有name与user_id可以被批量写入用户无法通过伪造请求参数注入其他字段$casts将数据库中的complete列在读写时自动转换为 PHP 布尔类型保证!$todo-complete这类取反操作语义正确。User 模型app/User.php实现 Laravel 的认证契约class User extends Model implements AuthenticatableContract, CanResetPasswordContract { use Authenticatable, CanResetPassword; protected $table users; protected $fillable [name, email, password]; protected $hidden [password, remember_token]; }$hidden确保模型序列化为 JSON 时不会泄露密码哈希与记住令牌是认证场景的安全基线。路由与控制器认证 待办 CRUD 的实现剖析路由表所有路由集中在 app/Http/routes.php一览即可看清应用全貌// Home Page Route::get(/, AuthControllerhome); // Login and Logout Route::get(/login, [middleware guest, uses AuthControllergetLogin]); Route::post(/login, [middleware guest, uses AuthControllerpostLogin]); Route::get(/logout, [middleware auth, uses AuthControllerlogout]); // Registration and User Profile Route::resource(user, UserController, [except [index, show, destroy]]); // Todo Resources Route::resource(todo, TodoController, [middleware auth]);路由设计体现了清晰的访问控制分层游客专属guest中间件登录页只允许未登录用户访问已登录用户会被重定向登录专属auth中间件登出与全部待办资源路由都要求先登录未认证请求会被拦截从框架层面保证只有登录用户才能管理自己的待办资源路由user与todo使用 RESTful 资源路由一条声明即可生成 7 个标准动作index/create/store/show/edit/update/destroy的映射。认证控制器auth 认证流程 的核心是postLogin方法它使用 Laravel 的Auth::attempt完成凭据校验if (Auth::attempt([ email $request-get(email), password $request-get(password), ], $request-get(remember))) { return redirect()-intended(/todo) -with(flash_notification.message, Logged in successfully) -with(flash_notification.level, success); } return redirect()-back()-withInput() -with(flash_notification.message, Wrong email or password) -with(flash_notification.level, danger);Auth::attempt会基于users表自动完成 bcrypt 密码哈希比对成功后写入会话redirect()-intended(/todo)支持登录后回到原目标页的体验失败时withInput()回填表单数据并通过 flash 消息提示错误等级success/danger前端 Bootstrap 据此渲染不同样式的提示条。待办控制器CRUD 与状态切换TodoController 实现了待办的核心业务逻辑列表indexTodo::where(user_id, Auth::id())-paginate(7)按当前登录用户过滤每页展示 7 条直接调用 SQL Server 执行分页查询新增store先校验name必填再通过Todo::create写入name与user_id取自Auth::user()-id实现每用户独立待办列表状态切换update这是 README 所述Mark Status功能的实现核心逻辑为取反布尔值$todo Todo::findOrFail($id); $todo-complete !$todo-complete; $todo-save();得益于 Todo 模型中的$casts [complete boolean]!$todo-complete能正确完成 true/false 翻转并写回 SQL Server 的 bit 列删除destroyTodo::findOrFail($id)-delete()删除记录配合资源路由的DELETE /todo/{id}使用。运行与测试验证启动应用数据库迁移完成后即可启动开发服务器php artisan serve默认监听http://localhost:8000。访问首页后可依次体验注册用户 → 登录 → 新建待办 → 切换完成状态 → 删除待办完整流程覆盖 README 中定义的两大核心功能。生产部署时可将 Apache 的文档根目录指向public/目录。自动化测试仓库提供了基于 PHPUnit 的功能测试验证待办模块的核心行为见 tests/TodoTest.phptestSeeTodoList访问/todo应看到Todo List标题testSeeAddTodoFrom点击Add New Todo应跳转到/todo/create并显示创建表单testAddTodo填写名称并提交后应回到列表页并提示New todo created successfully且数据库todos表中出现对应记录seeInDatabase断言。测试在setUp中通过工厂创建一个用户并actingAs($user)模拟登录态见 tests/TodoTest.php结合 database/factories/ModelFactory.php 的模型工厂批量生成测试数据完整覆盖了创建 → 列表 → 入库校验的业务链路。执行测试使用vendor/bin/phpunit测试运行在sqlsrv默认连接之上进一步印证了 Laravel 的 ORM、查询构造器与迁移在 SQL Server 后端的完整可用性。小结通过 Myboard 示例可以总结出 PHP Laravel 对接 SQL Server 的完整落地路径在 Ubuntu 上安装 PHP 7 及与版本匹配的微软 PHP SQL Server 驱动pdo_sqlsrv与 ODBC 驱动用 Composer 安装 Laravel 5.1 及依赖在 config/database.php 中配置sqlsrv连接并把default设为sqlsrv使用php artisan migrate让 Laravel 的 Schema Builder 直接在 SQL Server 上建表借助 Eloquent 模型、Auth认证与资源路由完成业务开发全程无需编写任何原生 SQL。该示例的价值在于它证明了 Laravel 的数据库抽象层对 SQL Server 是一等公民——迁移、查询构造器、Eloquent ORM、分页与测试框架均可无缝工作为 PHP 开发者接入 SQL Server / Azure SQL Database 提供了可直接复用的参考实现。进一步探索完整的安装步骤与前置组件清单README数据库连接配置config/database.php待办业务实现app/Http/Controllers/TodoController.php数据模型与迁移app/Todo.php、app/User.php、database/migrations功能测试tests/TodoTest.php赞分享示例工程数据库教程后端【免费下载链接】sql-server-samplesAzure Data SQL Samples - Official Microsoft GitHub Repository containing code samples for SQL Server, Azure SQL, Azure Synapse, and Azure SQL Edge项目地址https://gitcode.com/gh_mirrors/sq/sql-server-samples点击查看免费下载相关推荐前端低代码可视化开发完全解析从零拆解一个可视化搭建引擎前端低代码可视化开发完全解析从零拆解一个可视化搭建引擎 对于正在做前端低代码、可视化开发的同学这篇文章会带你彻底拆开一个可视化搭建引擎的内部结构从画布渲染前端文档教程使用Nhost和React构建待办事项管理应用使用Nhost和React构建待办事项管理应用 前言 在现代Web开发中后端服务的搭建往往需要投入大量时间和精力。Nhost作为一个开箱即用的后端即服务 Ba后端认证鉴权数据库无服务开发工具云原生mini-vue开发实战构建一个待办事项应用mini vue开发实战构建一个待办事项应用 你是否还在为学习Vue3源码感到困惑是否想通过实际项目来深入理解Vue3的核心原理本文将带你使用mini v前端教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门