
本文档旨在指导开发者如何在 Laravel 框架下构建一个内容管理系统(CMS),并解决在前端页面展示管理后台数据时遇到的“Undefined variable”错误。我们将以博文管理和关于我们信息管理为例,详细讲解后台数据录入、编辑、展示的完整流程,并提供关键代码示例和注意事项,帮助开发者快速搭建可维护、易扩展的内容管理系统。
问题分析与解决方案
出现 Undefined variable: aboutresult 错误的原因是在 user.english.index 视图中使用了 $aboutresult 变量,但在对应的控制器方法 EngHafizController@home 中,只将 $result 变量传递给了视图。
正确的做法是将 $aboutresult 和 $result 两个变量都传递给 user.english.index 视图。修改后的 EngHafizController@home 方法如下:
get();
$data['result'] = DB::table('posts')->get();
return view('user.english.index', $data);
}
// ... 其他方法
}解释:
- $data['aboutresult'] = DB::table('abouts')->get();:从 abouts 表中获取所有数据,并将其赋值给 $data 数组中的 aboutresult 键。
- $data['result'] = DB::table('posts')->get();:从 posts 表中获取所有数据,并将其赋值给 $data 数组中的 result 键。
- return view('user.english.index', $data);:将包含 aboutresult 和 result 键的 $data 数组传递给 user.english.index 视图。
内容管理系统构建步骤
以下将更详细地介绍如何构建一个完整的内容管理系统,包括后台管理和前台展示两部分。
1. 数据库设计
首先,需要设计数据库表结构。根据需求,我们创建了 posts 表用于存储博文信息,abouts 表用于存储“关于我们”信息。
posts 表结构:
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| title | VARCHAR(255) | 标题 1 |
| description | TEXT | 描述 1 |
| title2 | VARCHAR(255) | 标题 2 |
| description2 | TEXT | 描述 2 |
| image | VARCHAR(255) | 图片 1 文件名 |
| image2 | VARCHAR(255) | 图片 2 文件名 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
abouts 表结构:
| 字段名 | 数据类型 | 说明 |
|---|---|---|
| id | INT | 主键,自增 |
| title3 | VARCHAR(255) | 标题 |
| heading3 | VARCHAR(255) | 标题 |
| description3 | TEXT | 描述 |
| image3 | VARCHAR(255) | 图片文件名 |
| created_at | TIMESTAMP | 创建时间 |
| updated_at | TIMESTAMP | 更新时间 |
可以使用 Laravel 的 Migration 来创建这些表:
php artisan make:migration create_posts_table php artisan make:migration create_abouts_table
然后在对应的 Migration 文件中定义表结构。
2. 后台管理功能实现
后台管理功能主要包括数据的增删改查(CRUD)操作。
2.1 模型创建
首先,创建对应的 Eloquent 模型:
php artisan make:model Post php artisan make:model About
2.2 控制器实现
创建控制器 PostController 和 AboutController 来处理后台请求。
部分功能简介:商品收藏夹功能热门商品最新商品分级价格功能自选风格打印结算页面内部短信箱商品评论增加上一商品,下一商品功能增强商家提示功能友情链接用户在线统计用户来访统计用户来访信息用户积分功能广告设置用户组分类邮件系统后台实现更新用户数据系统图片设置模板管理CSS风格管理申诉内容过滤功能用户注册过滤特征字符IP库管理及来访限制及管理压缩,恢复,备份数据库功能上传文件管理商品类别管理商品添加/修改/
PostController:
orderBy('id','desc')->get();
return view('admin.post.list',$data);
}
function submit(Request $req)
{
//validation
$req->validate([
'title' => 'required',
'description' => 'required',
'title2' => 'required',
'description2' => 'required',
'image' => 'mimes: jpg,jpeg,png',
'image2' => 'mimes: jpg,jpeg,png'
]);
//storing image
$image=$req->file('image');
$ext = $image->extension();
$file=time().'.'.$ext;
$image->storeAs('public/post',$file);
$image2=$req->file('image2');
$ext2 = $image2->extension();
$file2=time().'.'.$ext2;
$image2->storeAs('public/post/secondbanner',$file2);
//array
$data = array(
'title' => $req->input('title'),
'description' => $req->input('description'),
'title2' => $req->input('title2'),
'description2' => $req->input('description2'),
'image' => $file,
'image2' => $file2,
);
//inserting data
DB::table('posts')->insert($data);
$req->session()->flash('msg','Data has been Added');
return redirect('/admin/post/list');
}
function delete(Request $req , $id)
{
DB::table('posts')->where('id',$id)->delete();
$req->session()->flash('msgForDelete','Data has been Deleted');
return redirect('/admin/post/list');
}
function edit(Request $req , $id)
{
$data['result'] = DB::table('posts')->where('id',$id)->get();
return view('admin.post.edit',$data);
}
function update(Request $req , $id)
{
//validation
$req->validate([
'title' => 'required',
'description' => 'required',
'title2' => 'required',
'description2' => 'required',
'image' => 'mimes: jpg,jpeg,png',
'image2' => 'mimes: jpg,jpeg,png'
]);
//array
$data = array(
'title' => $req->input('title'),
'description' => $req->input('description'),
'title2' => $req->input('title2'),
'description2' => $req->input('description2'),
);
if($req->hasfile('image'))
{
$image=$req->file('image');
$ext = $image->extension();
$file=time().'.'.$ext;
$file2=time().'.'.$ext;
$image->storeAs('public/post/',$file,$file2);
$data['image']=$file;
}
if($req->hasfile('image2'))
{
$image2=$req->file('image2');
$ext = $image2->extension();
$file2=time().'.'.$ext;
$image2->storeAs('public/post/secondbanner',$file2);
$data['image2']=$file2;
}
//updating data
DB::table('posts')->where('id',$id)->update($data);
$req->session()->flash('msg','Data has been Updated');
return redirect('/admin/post/list');
}
}AboutController:
orderBy('id','desc')->get();
return view('admin.post.about.aboutlist',$data);
}
function about_submit(Request $request)
{
//validation
$request->validate([
'title3' => 'required',
'heading3' => 'required',
'description3' => 'required',
'image3' => 'mimes: jpg,jpeg,png'
]);
//storing image
$image3=$request->file('image3');
$ext = $image3->extension();
$file=time().'.'.$ext;
$image3->storeAs('public/post/about_image',$file);
//array
$data = array(
'title3' => $request->input('title3'),
'heading3' => $request->input('heading3'),
'description3' => $request->input('description3'),
'image3' => $file,
);
//inserting data
DB::table('abouts')->insert($data);
$request->session()->flash('msg','Data has been Added');
return redirect('/admin/post/about/aboutlist');
}
function about_delete(Request $request , $id)
{
DB::table('abouts')->where('id',$id)->delete();
$request->session()->flash('msgForDelete','Data has been Deleted');
return redirect('/admin/post/list');
}
function about_edit(Request $request , $id)
{
$data['aboutresult'] = DB::table('abouts')->where('id',$id)->get();
return view('admin.post.about.aboutedit',$data);
}
function about_update(Request $request , $id)
{
//validation
$request->validate([
'title3' => 'required',
'heading3' => 'required',
'description3' => 'required',
'image3' => 'mimes: jpg,jpeg,png'
]);
//array
$data = array(
'title3' => $request->input('title3'),
'heading3' => $request->input('heading3'),
'description3' => $request->input('description3'),
);
if($request->hasfile('image3'))
{
$image3=$request->file('image3');
$ext = $image3->extension();
$file=time().'.'.$ext;
$image3->storeAs('public/post/about_image',$file);
$data['image3']=$file;
}
//updating data
DB::table('abouts')->where('id',$id)->update($data);
$request->session()->flash('msg','Data has been Updated');
return redirect('/admin/post/about/aboutlist');
}
}2.3 视图创建
创建对应的 Blade 视图文件,用于展示数据和提供表单。例如:
- admin/post/list.blade.php:博文列表
- admin/post/add.blade.php:添加博文
- admin/post/edit.blade.php:编辑博文
- admin/post/about/aboutlist.blade.php:关于我们列表
- admin/post/about/aboutadd.blade.php:添加关于我们信息
- admin/post/about/aboutedit.blade.php:编辑关于我们信息
示例:admin/post/list.blade.php
@extends('admin.layouts.app')
@section('main-content')
English Home Section
{{session('msg')}}
{{session('msgForDelete')}}
ID
Title 1
Description 1
Title 2
Description 2
Image 1
Image 2
Action
@foreach ($result as $list)
{{$list->id}}
{{$list->title}}
{{$list->description}}
{{$list->title2}}
{{$list->description2}}
@@##@@image) }}" width="150px"/> @@##@@image2) }}" width="150px"/>
Edit
Delete
@endforeach
ID
Title 1
Description 1
Title 2
Description 2
Image 1
Image 2
Action









