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 code. It has certain reference and learning value for everyone. I hope it can help everyone.
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 to avoid changing it after writing it. Write more unnecessary code.
Requirements 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 Routing
The following routes are probably required 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 save 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 route | Take out and update the article and save it back to the database | | Delete article function route | Delete the article from the 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');
Only the above line of code is needed, which is equivalent to creating the following 7 routes, and they are all named routes. We can use something like route( 'articles.show') such usage.
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
resources/views/layouts/art.blade.php
See template index.html
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
At this time, if you fill in the new article form and click submit, it will jump to a blank page. The same reason is true, because our subsequent controller code has not been written yet.
To implement article storage, you must first configure the database, create data tables, create models, and then complete the storage logic code.
1. Configure database
Modify .env file
2. Create data table
Use artisan command to generate migration:
php artisan make:migration create_articles_talbe --create=articles
Modify the migration file
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'); }
We created an articles table, including an incremental id field, a string title field, a long text content field, and a timestamp.
Execute database migration:
php artisan migrate
Log in to mysql and view the data table.
3. Create a model
Use the artisan command to create a model:
php artisan make:model Article
Open the model file and enter the following code:
app/Article. php
namespace App; use Illuminate\Database\Eloquent\Model; class Article extends Model { //对应的表 protected $table = 'articles'; //通过model可以写入的字段 protected $fillable = [ 'title', 'content', ]; }
4. Storage logic code
Open the ArticlesController.php controller and find the store() method.
app/Http/Controllers/ArticlesController.php
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'); }
Verification error display
@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
Completed adding articles After adding the function, we can implement our article list display page.
Open ArticlesController.php and find the index() method, add the following code:
app/Http/Controllers/ArticlesController.php
use App\Article; public function index() { $articles = Article::orderBy('created_at','asc')->get(); return view('articles.index', ['articles'=>$articles]); }
View index.blade.php
@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
The edit article form is actually very similar to the new article form created before, except that you need to read the existing data and fill it in the form.
First we add an edit button to each article on the article list page:
View:
@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
Note the {{ method_field('PATCH' ) }} , this is cross-site method forgery, the HTML form does 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.
Controller
//展示修改模板 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
Delete button
<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>
Controller:
public function destroy($id) { $article = Article::findOrFail($id); $article->delete(); return back(); }
10. Conclusion
This experiment uses a very simple mini-blog to conduct intensive exercises on Laravel RESTful resource controllers, routing, views, and ORM.
Related recommendations:
Detailed examples of Vue+SpringBoot development of V tribe blog management platform
LAMP is based on the PHP module to build a personal blog Detailed explanation with pictures and text
How to make a simple blog with PHP
The above is the detailed content of Build a mini blog in laravel. For more information, please follow other related articles on the PHP Chinese website!