public function store(Request $request) { //数据验证 错误处理 $this->validate($request,[ 'title'=>'required|max:50', 'content'=>'required|max:500', ]); // 1 orm方式写入 $article = Article::create([ 'title'=>$request->title, 'content'=>$request->content, ]); //2 或者 /* $article = new Article(); $article->title =$request->title; $article->content = $request->content; $article->save();*/ //3 db方式写入 //insert()方法返回值为true 和 false //$res = DB::table('articles')->insert(['title'=>$request->title,'content'=>$request->content]); return redirect()->route('blog.index'); }
验证错误显示
@if (count($errors) > 0) <div> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </div> @endif
七、文章列表展示
完成了添加文章功能后,就可以实现我们的文章列表展示页了。
打开 ArticlesController.php 找到 index() 方法,添加代码如下:
app/Http/Controllers/ArticlesController.php
use App\Article; public function index() { $articles = Article::orderBy('created_at','asc')->get(); return view('articles.index', ['articles'=>$articles]); }
视图index.blade.php
@extends('layouts.art') @section('content') <a href="{{route('blog.create')}}" >添加文章</a> @foreach($articles as $article) <div> <div> {{$article->title}} <a href="{{route('blog.show',$article->id)}}">阅读</a> <a href="{{route('blog.edit', $article->id)}}">修改</a> <form action="{{ route('blog.destroy', $article->id) }}" method="post"> {{ csrf_field() }} {{ method_field('DELETE') }} <button type="submit">删除</button> </form> </div> </div> @endforeach {!! $articles->render() !!} @endsection
八、编辑文章表单
编辑文章表单其实和之前创建的新建文章表单很类似,只是需要额外将现有的数据读取出来填在表单上。
首先我们在文章列表页的每个文章上添加一个编辑按钮:
视图:
@extends('layouts.art') @section('content') <form method="post" action="{{route('blog.update',$article->id)}}"> {{ csrf_field() }} {{ method_field('PATCH') }} <div> <label for="inputEmail3">标题</label> <div> <input type="title" value="{{ $article->title }}"> </div> </div> <div> <label for="inputEmail3">内容</label> <div> <textarea rows="5"> {{ $article->content }}</textarea> </div> </div> <div> <div> <button type="submit">修改</button> </div> </div> </form> @endsection
注意这段代码中的 {{ method_field('PATCH') }} ,这是跨站方法伪造,HTML 表单没有支持 PUT、PATCH 或 DELETE 动作。所以在从 HTML 表单中调用被定义的 PUT、PATCH 或 DELETE 路由时,你将需要在表单中增加隐藏的 _method 字段来伪造该方法,详情参考 。
控制器
//展示修改模板 public function edit($id) { $article = Article::findOrFail($id); return view('art.edit',['article'=>$article]); } //执行修改 public function update(Request $request, $id) { $this->validate($request, [ 'title' => 'required|max:50', 'content'=>'required|max:500', ]); $article = Article::findOrFail($id); $article->update([ 'title' => $request->title, 'content' => $request->content, ]); return redirect()->route('blog.index'); }
九、删除文章
删除按钮
<form action="{{ route('blog.destroy', $article->id) }}" method="post"> {{ csrf_field() }} {{ method_field('DELETE') }} <button type="submit">删除</button> </form>
控制器:
public function destroy($id) { $article = Article::findOrFail($id); $article->delete(); return back(); }
十、结语
本次实验通过一个很简单的迷你博客对 Laravel RESTful 资源控制器和路由,视图,orm进行了强化练习。
好了,以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。