任务38:初始化文章管理模块
一、创建文章 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

浙公网安备 33010602011771号