Laravel如何创建模型控制器读取数据库内容渲染首页
Laravel 实现首页动态内容读取及后台编辑方案
整个实现逻辑和原生PHP开发的核心流程完全一致,只是Laravel把重复的PDO连接、SQL执行、模板传参逻辑做了封装,不用重复写样板代码,具体步骤如下:
1. 创建数据表与对应模型
首先生成模型和配套的数据库迁移文件,在项目根目录执行artisan命令:
php artisan make:model HomeContent -m
命令执行完会生成两个文件:
- 模型文件:
app/Models/HomeContent.php - 迁移文件:
database/migrations/[时间戳]_create_home_contents_table.php
先打开迁移文件编辑表结构,用来存储首页的各个动态文本块:
public function up() { Schema::create('home_contents', function (Blueprint $table) { $table->id(); $table->string('slug')->unique(); // 内容唯一标识,比如site_slogan、home_intro,用来快速定位对应内容 $table->string('title'); // 内容备注名,方便后台编辑时识别 $table->text('content'); // 存储具体的文本内容 $table->timestamps(); }); }
保存后执行迁移命令生成数据表:
php artisan migrate
再打开模型文件,配置可批量赋值属性,方便后续后台编辑时写入数据:
namespace App\Models; use Illuminate\Database\Eloquent\Model; class HomeContent extends Model { protected $fillable = ['slug', 'title', 'content']; }
初始的首页默认文案可以通过Seeder填充,不用手动操作数据库,生成Seeder类写入默认内容后执行
php artisan db:seed即可完成初始化。
2. 编写控制器逻辑,查询动态数据
如果你还没有首页控制器,执行命令生成:
php artisan make:controller HomeController
打开控制器文件app/Http/Controllers/HomeController.php,在首页方法中查询内容并传递给视图:
namespace App\Http\Controllers; use App\Models\HomeContent; class HomeController extends Controller { public function index() { // 一次性取出所有首页内容,整理成slug为键、content为值的数组,方便视图调用 $homeContents = HomeContent::query()->pluck('content', 'slug'); return view('home', compact('homeContents')); } }
最后确认路由文件routes/web.php中首页路由指向该控制器方法:
use App\Http\Controllers\HomeController; Route::get('/', [HomeController::class, 'index']);
3. 替换视图中的静态文本
打开首页视图文件(默认路径resources/views/home.blade.php),把原来的硬编码静态文本替换成动态变量输出即可:
{{-- 原来的静态写法 --}} {{-- <h1>欢迎访问我的站点</h1> <p>这是一段固定的站点介绍文本</p> --}} {{-- 替换为动态写法 --}} <h1>{{ $homeContents['site_slogan'] ?? '欢迎访问我的站点' }}</h1> <p>{{ $homeContents['home_intro'] ?? '这是默认的站点介绍文本,数据库无内容时显示' }}</p>
Blade模板的
{{ }}输出语法自带XSS防护,会自动转义HTML特殊字符,比原生PHP直接echo更安全。
后续搭建管理后台的扩展方向
要实现可视化编辑首页内容,不需要从零开发完整后台系统:
- 基础实现:新增一组后台路由,编写内容列表、编辑表单即可,表单提交时通过
HomeContent::updateOrCreate()方法写入数据,不需要手写拼接SQL,框架会自动处理参数绑定,避免SQL注入 - 快速方案:可以直接使用Laravel生态的后台构建工具,绑定HomeContent模型后即可自动生成内容增删改查界面,不需要手写表单逻辑
和原生PHP实现的对应关系
你熟悉的原生PHP流程是「建立PDO连接->手写SQL执行查询->fetch获取结果->传入模板渲染」,Laravel只是把重复步骤做了封装:
- 数据库连接只需要在
.env文件配置一次,全局复用,不需要每次请求手动new PDO实例 - Eloquent ORM的查询方法底层就是封装的PDO预处理+执行逻辑,不需要每次手写prepare、execute、fetch的重复代码
- 视图传参的逻辑和原生PHP中extract变量后include模板的逻辑完全一致,只是框架做了变量作用域隔离,避免变量污染
内容的提问来源于stack exchange,提问作者MoUser
相关产品推荐
相关产品推荐

