一、创建文章 Article 模型、迁移文件、控制器,验证器
1,创建模型同时创建迁移文件
php artisan make:model Models/Admin/Article -m
如图示
2,创建 Article 控制器,验证器的命令行命令分别是
php artisan make:controller Admin/ArticleController
和
php artisan make:request ArticleRequest
如图示
3,复制 User 控制器 App\Http\Controllers\Admin\CateController.php 上所有的方法到 App\Http\Controllers\Admin\ArticleController.php 上并把上面的 Cate和 admin.cate替换为 Article 和 admin.article。ArticleController.php 编辑后的代码如下
<?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use App\Http\Requests\ArticleRequest; use Illuminate\Http\Request; class ArticleController extends Controller { //文章 public function index(){ $data = Article::paginate(5);//获取文章表数据并分页,每页展示 5 条记录 return view(\'admin.article.index\',compact(\'data\'));//compact()是分配数据 } public function add(){ return view(\'admin.article.add\'); } public function addSave(ArticleRequest $request){//Request $request 依赖注入 //dd($request->all()); //打印接收到的数据 $Article = Article::create($request->all()); //Article模型create对象往数据表添加数据 if($Article->id){ return redirect()->route(\'admin.article.index\')->with(\'success-msg\',\'添加文章成功!\'); }else{ return redirect()->route(\'admin.article.index\')->with(\'danger-msg\',\'添加文章失败!\'); } } public function edit(int $id){//$id是接收到的ID $Article = Article::find($id);//通过ID在数据库查找对应文章信息 return view(\'admin.article.edit\',compact(\'Article\')); //compact(\'Article\')是分配数据到模板 } public function editSave(ArticleRequest $request,int $id){ //方法一,更新数据update() // $update = Article::find($id)->update($request->all()); //dd($update); //方法二,保存数据save() $Article = Article::find($id); $Article -> Article_name = $request->input(\'Article_name\'); $Article -> keywords = $request->input(\'keywords\'); $Article -> description = $request->input(\'description\'); if($Article->save()){ return redirect()->route(\'admin.article.index\')->with(\'success-msg\',\'修改文章成功!\'); }else{ return redirect()->back()->with(\'danger-msg\',\'修改文章失败!\'); } } public function delete(Request $request,int $id){ $del = Article::destroy($id); if($del){ return redirect()->back()->with(\'success-msg\',\'删除文章成功!\'); }else{ return redirect()->back()->with(\'danger-msg\',\'删除文章失败!\'); } } }
4,在 \resources\views\Admin\Article下新建 Article 的3个模板文件 index.blade.php, edit.blade.php , add.blade.php。并复制 \resources\views\Admin\Cate下的3个模板的内容 来替换。
5,修改 \resources\views\Admin\Article\index.blade.php 模板,暂时删除 <tbody> </tbody>标签之间的内容,分页调用代码 {{$data -> links()}} 也暂时删除 。
6,编辑 \routes\web.php 路由, 新增 Article文章列表 的路由 ,直接加在后台 路由分组 内,栏目列表路由 后面 如下
//文章列表 Route::get(\'articles\',"articleController@index")->name("admin.article.index"); //文章添加界面 Route::get(\'article/add\',"articleController@add")->name("admin.article.add"); //文章添加处理 Route::post(\'article/add\',"articleController@addSave")->name("admin.article.add"); //文章修改界面 Route::get(\'article/edit/{id}\',"articleController@edit")->name("admin.article.edit")->where([\'id\'=>\'\d+\']); //文章修改处理 Route::post(\'article/edit/{id}\',"articleController@editSave")->name("admin.article.edit")->where([\'id\'=>\'\d+\']); //文章删除 Route::get(\'article/delete/{id}\',"articleController@delete")->name("admin.article.delete")->where([\'id\'=>\'\d+\']);
7,\resources\views\Admin\Layout\main.blade.php 编辑公共模板main.blade.php 新增如下代码 在左侧导航栏的<ul></ul>中
<li> <a href="#" class="menu-dropdown"> <i class="menu-icon fa fa-pencil-square-o"></i> <span class="menu-text">文章管理</span> <i class="menu-expand"></i> </a> <ul class="submenu"> <li> <a href="{{route(\'admin.article.index\')}}"> <span class="menu-text">文章列表</span> <i class="menu-expand"></i> </a> </li> <li> <a href="{{route(\'admin.article.add\')}}"> <span class="menu-text">文章添加</span> <i class="menu-expand"></i> </a> </li> </ul> </li>
效果如下
8,文章数据表 字段
a,编辑 article 的迁移文件 \database\migrations\2020_05_19_082838_create_articles_table.php 的up()方法 改成如下
public function up() { Schema::create(\'articles\', function (Blueprint $table) { $table->bigIncrements(\'id\'); $table->string(\'title\',200)->default(\'\')->comment(\'标题\'); $table->string(\'pic\',200)->default(\'\')->comment(\'缩略图\'); $table->string(\'keywords\',255)->default(\'\')->comment(\'关键词\'); $table->string(\'description\',500)->default()->comment(\'描述\'); $table->bigInteger(\'cate_id\')->default(0)->comment(\'所属分类\'); $table->text(\'content\')->comment(\'内容 \'); $table->bigInteger(\'click\')->default(0)->comment(\'点击量\'); $table->timestamps(); $table->softDeletes(); }); }
b,编辑 \app\Models\Admin\Article.php 如下
<?php namespace App\Models\Admin; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Article extends Model { use SoftDeletes; protected $dates = [\'delete_at\']; protected $guarded = []; //把不能往数据表添加的字段设为空,如:@crsf 创建的token隐藏字段 }
c,命令行 执行,重新生成所有表,并多了 Articles 表
php artisan migrate:refresh --seed
如下图示
3,App\Http\Controllers\Admin\ArticleController.php 修改方法 add()
public function add(){ $cateRes = Cate::all(); return view(\'admin.article.add\',compact(\'cateRes\')); }
4,\resources\views\Admin\Article\add.blade.php 模板文件编辑 为:
@extends(\'Admin.Layout.main\') @section(\'content\') <!-- Page Breadcrumb --> <div class="page-breadcrumbs"> <ul class="breadcrumb"> <li> <a href="#">系统</a> </li> <li> <a href="#">文章管理</a> </li> <li class="active">添文章</li> </ul> </div> <!-- /Page Breadcrumb --> <!-- Page Body --> <div class="page-body"> @include(\'Admin.Layout.msg\') <div class="row"> <div class="col-lg-12 col-sm-12 col-xs-12"> <div class="widget"> <div class="widget-header bordered-bottom bordered-blue"> <span class="widget-caption">新增文章</span> </div> <div class="widget-body"> <div id="horizontal-form"> <form class="form-horizontal" role="form" action="{{route(\'admin.article.add\')}}" method="post"> @csrf <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">标题</label> <div class="col-sm-6"> <input class="form-control" id="cate_name" placeholder="" name="cate_name" required="" type="text"> </div> <p class="help-block col-sm-4 red">* 必填</p> </div> <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">关键词</label> <div class="col-sm-6"> <input class="form-control" id="keywords" placeholder="" name="keywords" required="" type="text"> </div> </div> <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">描述</label> <div class="col-sm-6"> <textarea class="form-control" id="description" name="description" ></textarea> </div> </div> <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">所属分类</label> <div class="col-sm-6"> <select name="cate_id"> <option value="0">选择分类</option> @foreach($cateRes as $cate) <option value="{{$cate->id}}">{{$cate->cate_name}}</option> @endforeach </select> </div> </div> <div class="form-group"> <label for="username" class="col-sm-2 control-label no-padding-right">内容</label> <div class="col-sm-6"> <textarea class="form-control" id="content" name="content" required="" ></textarea> </div> </div> <div class="form-group"> <div class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">保存信息</button> </div> </div> </form> </div> </div> </div> </div> </div> </div> <!-- /Page Body --> @endsection
5,浏览器访问 http://laravel.pensive.top/admin/article/add 效果如下
END