完成增删改查吧: 首先完成 BlogController@index : 展示列表先来个入口链接,打开 home.blade.php{{-- 上面说过这里会添加一个按钮 --}}
点击这里查看我的博客编辑 BlogController@index => 这里还是再提醒一下吧,这是说 BlogController 的 index() 方法。控制器文件都在 app\Http\Controllers 中<?php
namespace App\Http\Controllers;
use App\Blog; //这里是使用命令创建控制器时,通过 --model=Blog 自动帮我们生成的
use Illuminate\Http\Request;
class BlogController extends Controller{
public function index()
{
// 查询数据,并且让查询结果是一个可分页对象
$blogs = Blog::orderBy('created_at', 'desc') // 调用 Blog模型 的静态方法 orderBy('根据created_at字段', '倒叙排序')
->paginate(6); // -> 链式操作:paginate(6) 即数据没页6条
// 跳转到视图并传值
return view('blog.index', [ //第一个参数是说,视图模板是 /resources/views/blog/index.blade.php 'blogs' => $blogs, //这里是说,我们给视图传递一个叫 $'blogs'的变量,值是前面我们查询的数据,也叫$blogs。
]); // view() 的第二参数也可以使用 view(..., compact('blogs'))
}此时刷新页面当然会报错了,因为我们的视图还不存在,新建文件夹 /resources/views/blog/index.blade.php@extends('layouts.app')
@section('content')
这里是内容
@endsection这就是我们所有页面的布局,可以复制一份,作为模板。完成视图里面的内容
文章标题发布时间相关操作
{{-- 这里通过 @foreach 遍历数据 --}} @foreach ($blogs as $blog)
{{ $blog->title }}{{ $blog->created_at }}@endforeach
{{-- 这里通过 $blogs->links() 来显示分页按钮 --}} {{ $blogs->links() }}
添加文章 完成文章的添加 BlogController@createpublic function create(){
return view('blog.create'); //载入视图
}编辑视图 重点:表单中添加@csrf告诉框架,这是我们自己的表单,不用担心csrf跨站请求伪造的攻击@extends('layouts.app')
@section('content')
{{-- from.method="POST" action="通过 route()函数读取路由别名 " --}}
{{-- 声明 csrf 令牌 --}}
@csrf
文章标题
文章内容
发布新文章
@endsection所谓跨站请求伪造,可以理解为来自于其他ip的表单,恶意请求我们的服务器。Laravel提供了一种防范这种攻击的手段,即将自己的路由隐藏起来,只有带有 @csrf 声明的表单可以找得到接收表单信息的路由编辑 BlogController@storepublic function store(Request $request) //这里的 $request 是通过依赖注入的方法实例化的 Request 类的对象,包含的有所有请求的信息
{
// 我们只需要调用 Blog模型 的静态方法 create() 插入 $request->post() 数据即可
$blog = Blog::create($request->post()); //改方法的返回值是新插入的数据生成的对象
// redirect() 页面重定向
return redirect()->route('blog.show', $blog); // 这里我们将 $blog 作为参数请求 BlogController@show
}回到页面,点击提交,会发现报错了,Laravel是一个极其注重安全的框架,用户能修改哪些字段,必须要在模型文件中声明,因此打开 app\Blog.php 模型文件// 可填字段白名单
protected $fillable = [
'title', 'content'
];再次提交,页面一片空白,是因为我们的 BlogController@show 方法还没有写,不过你可以注意到地址栏已经发生了改变。
完成 show 方法public function show(Blog $blog) //这里已经通过依赖注入的形式帮我们实例化了 $blog
{
return view('blog.show', [
'blog' => $blog, //直接将$blog传给视图进行渲染
]);
}新建 ../blog/show.blade.php@extends('layouts.app')
@section('content')
{{ $blog->title }}
发布时间{{ $blog->created_at }}
{{ $blog->content }}
@endsection刷新页面,文章就显示出来了。
完成我们的编辑入口链接: 在 ../blog/index.blade.php & show.blade.php 中合理的位置添加一个编辑按钮编辑文章完成 BlogController@editpublic function edit(Blog $blog){
return view('blog.edit', [
'blog' => $blog,
]);
}完成视图 重点:action声明文章编号,根据路由要求action在表单中使用@method伪造请求动作类型@extends('layouts.app')
@section('content')
{{-- action需要声明当前编辑的文章编号$blog->id --}}
{{-- 声明 csrf 令牌 --}}
@csrf
{{-- 伪造 PATCH 方法 --}}
@method("PATCH")
文章标题
文章内容
{{ $blog->content }}
发表于{{ $blog->created_at }}
修改于{{ $blog->updated_at }}
确认编辑
@endsection完成 BlogController@updatepublic function update(Request $request, Blog $blog){
$blog->update($request->post()); //调用 $blog对象->update(更新数据组成的数组) 更新
return redirect()->route('blog.show', $blog);
}完成删除功能 在 index.blade.php 和 show.blade.php 合理的位置插入删除按钮删除文章
{{-- 因为删除也需要 csrf 令牌认证,所以弄个表单 --}}
@csrf
{{-- 这里伪造DELETE请求 --}}
@method("DELETE")
“删除文章” 按钮其实是调用了一个 js 函数,我们在 ../layousts/app.blade.php 中完成完成 BlogController@delete 方法public function destroy(Blog $blog){$blog->delete();
return redirect()->route('blog.index'); //跳转到首页
}增删改查完成。