This article mainly introduces you to the relevant information about using laravel to build a mini blog. The article introduces the step-by-step implementation steps in very detail through sample codes. It has certain reference and learning value for everyone. Friends who need it Let’s learn with the editor below.
This article mainly introduces to you the relevant content about using laravel to build a mini blog. It is shared for your reference and learning. I won’t say much below, let’s take a look at the detailed introduction:
1. Design and Ideas
Before starting to write the first line of code, we must try our best to design the product we want to do from beginning to end. Well, avoid writing and revising it again and writing more unnecessary code.
Requirement analysis: Our mini blog should at least include: add/edit/view/delete articles, and article list display functions.
Database analysis: Based on this function, we only need an Articles data table to store articles.
Page structure analysis: Template inheritance should be used to create a basic template including: header/article list/bottom information
2. Create routes
The following routes are probably needed to complete this blog:
| Routing | Function | | -------- | ---------------- | | Article list page routing | Return to article list page | | New article page routing | Return to new article page | | Article saving function routing | Save article to database | | View article page routing | Return to article details page | | Edit article page routing | Return to edit article page | | Edit article function routing | Take out and update the article and then save it back to the database | | Delete article function routing | Delete article from database |
You can see that almost all of them are data operation routes for articles. For this situation, Laravel provides a very convenient method: RESTful resource controller and routing .
Open routes.php and add the following code:
Route::resource('articles', 'ArticlesController');
With just one line of code above, it is equivalent to creating the following 7 routes, all of which are named routes. We can use something like route('articles.show').
Route::get('/articles', 'ArticlesController@index')->name('articles.index'); Route::get('/articles/{id}', 'ArticlesController@show')->name('articles.show'); Route::get('/articles/create', 'ArticlesController@create')->name('articles.create'); Route::post('/articles', 'ArticlesController@store')->name('articles.store'); Route::get('/articles/{id}/edit', 'ArticlesController@edit')->name('articles.edit'); Route::patch('/articles/{id}', 'ArticlesController@update')->name('articles.update'); Route::delete('/articles/{id}', 'ArticlesController@destroy')->name('articles.destroy');
3. Create a controller
Use artisan to create an article controller:
php artisan make:controller ArticlesController
4. Create a basic view
5. New article form
@extends('layouts.art') @section('content') <form class="form-horizontal" method="post" action="{{route('blog.store')}}"> {{ csrf_field() }} <p class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">标题</label> <p class="col-sm-8"> <input type="title" class="form-control" id="title" name="title"> </p> </p> <p class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">内容</label> <p class="col-sm-8"> <textarea class="form-control" rows="5" id="content" name="content"></textarea> </p> </p> <p class="form-group"> <p class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">创建</button> </p> </p> </form> @endsection
6. Article storage
1. Configure database
2. Create data table
php artisan make:migration create_articles_talbe --create=articles
public function up() { Schema::create('articles', function (Blueprint $table) { $table->increments('id'); $table->string('title'); $table->longText('content'); $table->timestamps(); }); } public function down() { Schema::dropIfExists('articles'); }
php artisan migrate
3. Create the model
php artisan make:model Article
namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { //对应的表 protected $table = 'articles'; //通过model可以写入的字段 protected $fillable = [ 'title', 'content', ]; }
4. Storage logic code
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) <p class="alert alert-danger"> <ul> @foreach($errors->all() as $error) <li>{{ $error }}</li> @endforeach </ul> </p> @endif
7. Article list display
index() method, add the code as follows:
use App\Article; public function index() { $articles = Article::orderBy('created_at','asc')->get(); return view('articles.index', ['articles'=>$articles]); }
@extends('layouts.art') @section('content') <a class="btn btn-primary" href="{{route('blog.create')}}" rel="external nofollow" >添加文章</a> @foreach($articles as $article) <p class="panel panel-default"> <p class="panel-body"> {{$article->title}} <a href="{{route('blog.show',$article->id)}}" rel="external nofollow" class="btn btn-info">阅读</a> <a href="{{route('blog.edit', $article->id)}}" rel="external nofollow" class="btn btn-info">修改</a> <form action="{{ route('blog.destroy', $article->id) }}" method="post" style="display: inline-block;"> {{ csrf_field() }} {{ method_field('DELETE') }} <button type="submit" class="btn btn-danger">删除</button> </form> </p> </p> @endforeach {!! $articles->render() !!} @endsection
8. Edit article form
@extends('layouts.art') @section('content') <form class="form-horizontal" method="post" action="{{route('blog.update',$article->id)}}"> {{ csrf_field() }} {{ method_field('PATCH') }} <p class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">标题</label> <p class="col-sm-10"> <input type="title" class="form-control" id="title" name="title" value="{{ $article->title }}"> </p> </p> <p class="form-group"> <label for="inputEmail3" class="col-sm-2 control-label">内容</label> <p class="col-sm-10"> <textarea class="form-control" rows="5" id="content" name="content"> {{ $article->content }}</textarea> </p> </p> <p class="form-group"> <p class="col-sm-offset-2 col-sm-10"> <button type="submit" class="btn btn-default">修改</button> </p> </p> </form> @endsection
{{ method_field( 'PATCH') }} , this is cross-site method forgery, HTML forms do not support PUT, PATCH or DELETE actions. So when calling the defined PUT, PATCH or DELETE route from an HTML form, you will need to add a hidden _method field to the form to fake the method. For details, refer to the official documentation.
//展示修改模板 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'); }
9. Delete article
<form action="{{ route('blog.destroy', $article->id) }}" method="post" style="display: inline-block;"> {{ csrf_field() }} {{ method_field('DELETE') }} <button type="submit" class="btn btn-danger">删除</button> </form>
public function destroy($id) { $article = Article::findOrFail($id); $article->delete(); return back(); }
十、结语
本次实验通过一个很简单的迷你博客对 Laravel RESTful 资源控制器和路由,视图,orm进行了强化练习。
The above is the detailed content of Tutorial example of building a blog in laravel. For more information, please follow other related articles on the PHP Chinese website!