Home  >  Article  >  Backend Development  >  Tutorial example of building a blog in laravel

Tutorial example of building a blog in laravel

黄舟
黄舟Original
2018-05-16 11:14:562811browse

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

##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(&#39;blog.store&#39;)}}">
   {{ 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 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 migration file

public function up() 
 {
  Schema::create(&#39;articles&#39;, function (Blueprint $table) {
   $table->increments(&#39;id&#39;);
   $table->string(&#39;title&#39;);
   $table->longText(&#39;content&#39;);
   $table->timestamps();
  });
 }
public function down() 
 {
  Schema::dropIfExists(&#39;articles&#39;);
 }

We created an articles table, including incremental id field, string title field, and long text content fields, and timestamps.

Execute database migration:

php artisan migrate

Log in to mysql and view the data table.

3. Create the model

Use the artisan command to create the 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 = &#39;articles&#39;;
 //通过model可以写入的字段
 protected $fillable = [
  &#39;title&#39;, &#39;content&#39;,
 ];
}

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,[
   &#39;title&#39;=>&#39;required|max:50&#39;,
   &#39;content&#39;=>&#39;required|max:500&#39;,
   ]);
  // 1 orm方式写入
  $article = Article::create([
   &#39;title&#39;=>$request->title,
   &#39;content&#39;=>$request->content,
   ]);
  //2 或者
  /* $article = new Article();
   $article->title =$request->title;
   $article->content = $request->content;
   $article->save();*/

   //3 db方式写入
   //insert()方法返回值为true 和 false
   //$res = DB::table(&#39;articles&#39;)->insert([&#39;title&#39;=>$request->title,&#39;content&#39;=>$request->content]);
  return redirect()->route(&#39;blog.index&#39;);
 }

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

After completing the adding article function, we can implement our article list display page.

Open ArticlesController.php and find the

index() method, add the code as follows:

app/Http/Controllers/ArticlesController.php

use App\Article;

public function index() 
 {
  $articles = Article::orderBy(&#39;created_at&#39;,&#39;asc&#39;)->get();

  return view(&#39;articles.index&#39;, [&#39;articles&#39;=>$articles]);
 }

View index .blade.php

@extends(&#39;layouts.art&#39;)
@section(&#39;content&#39;)

 <a class="btn btn-primary" href="{{route(&#39;blog.create&#39;)}}" rel="external nofollow" >添加文章</a>


 @foreach($articles as $article)
 <p class="panel panel-default">
 <p class="panel-body">
 {{$article->title}}
 <a href="{{route(&#39;blog.show&#39;,$article->id)}}" rel="external nofollow" class="btn btn-info">阅读</a>
 <a href="{{route(&#39;blog.edit&#39;, $article->id)}}" rel="external nofollow" class="btn btn-info">修改</a>

  <form action="{{ route(&#39;blog.destroy&#39;, $article->id) }}" method="post" style="display: inline-block;">
   {{ csrf_field() }}
   {{ method_field(&#39;DELETE&#39;) }}
   <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 , you just 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(&#39;layouts.art&#39;)
@section(&#39;content&#39;)

 <form class="form-horizontal" method="post" action="{{route(&#39;blog.update&#39;,$article->id)}}">
   {{ csrf_field() }}
  {{ method_field(&#39;PATCH&#39;) }}
 <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

Pay attention to the

{{ 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.

Controller

//展示修改模板
public function edit($id) 
 {
  $article = Article::findOrFail($id);
  return view(&#39;art.edit&#39;,[&#39;article&#39;=>$article]);
 }
//执行修改
public function update(Request $request, $id) 
 {
  $this->validate($request, [
   &#39;title&#39; => &#39;required|max:50&#39;,
   &#39;content&#39;=>&#39;required|max:500&#39;,
  ]);

  $article = Article::findOrFail($id);
  $article->update([
   &#39;title&#39; => $request->title,
   &#39;content&#39; => $request->content,
  ]);

   return redirect()->route(&#39;blog.index&#39;);
 }

9. Delete article

Delete button

 <form action="{{ route(&#39;blog.destroy&#39;, $article->id) }}" method="post" style="display: inline-block;">
   {{ csrf_field() }}
   {{ method_field(&#39;DELETE&#39;) }}
   <button type="submit" class="btn btn-danger">删除</button>
  </form>

Control Device:

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!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn