
本文档旨在指导开发者如何在 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 表结构:
idINT主键,自增titleVARCHAR(255)标题 1descriptionTEXT描述 1title2VARCHAR(255)标题 2description2TEXT描述 2imageVARCHAR(255)图片 1 文件名image2VARCHAR(255)图片 2 文件名created_atTIMESTAMP创建时间updated_atTIMESTAMP更新时间
abouts 表结构:
idINT主键,自增title3VARCHAR(255)标题heading3VARCHAR(255)标题description3TEXT描述image3VARCHAR(255)图片文件名created_atTIMESTAMP创建时间updated_atTIMESTAMP更新时间
可以使用 Laravel 的 Migration 来创建这些表:
php artisan make:migration create_posts_tablephp artisan make:migration create_abouts_table
然后在对应的 Migration 文件中定义表结构。
2. 后台管理功能实现
后台管理功能主要包括数据的增删改查(CRUD)操作。
2.1 模型创建
首先,创建对应的 Eloquent 模型:
php artisan make:model Postphp artisan make:model About
2.2 控制器实现
创建控制器 PostController 和 AboutController 来处理后台请求。
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"/> id)}}">Edit id)}}">Delete @endforeach ID Title 1 Description 1 Title 2 Description 2 Image 1 Image 2 Action
微信扫一扫
支付宝扫一扫