任务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.articleArticleController.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','删除文章失败!');
        }

    }
}
View Code

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
View Code

5,浏览器访问 http://laravel.pensive.top/admin/article/add 效果如下

END

 

posted @ 2020-05-19 17:59  pensive2019  阅读(270)  评论(0)    收藏  举报