一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - PHP教程 - 利用laravel搭建一個迷你博客實戰(zhàn)教程

利用laravel搭建一個迷你博客實戰(zhàn)教程

2021-06-17 16:11范駿 PHP教程

這篇文章主要給大家介紹了關(guān)于利用laravel搭建一個迷你博客的相關(guān)資料,文中將一步步的實現(xiàn)步驟通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。

本文主要給大家介紹的是關(guān)于利用laravel搭建一個迷你博客的相關(guān)內(nèi)容,分享出來供大家參考學習,下面話不多說了,來一起看看詳細的介紹:

一、設(shè)計與思路

在開始寫第一行代碼之前,一定要盡量從頭到尾將我們要做的產(chǎn)品設(shè)計好,避免寫完又改,多寫不必要的代碼。

  • 需求分析:我們的迷你博客應(yīng)該至少包含:新增/編輯/查看/刪除文章,以及文章列表展示功能。
  • 數(shù)據(jù)庫分析:基于這個功能,我們只需要一張 Articles 數(shù)據(jù)表來存放文章即可。
  • 頁面結(jié)構(gòu)分析:應(yīng)該使用模板繼承建立一張基礎(chǔ)模板包含:頭部/文章列表/底部信息

二、創(chuàng)建路由

完成這個博客大概需要以下幾條路由:

| 路由 | 功能 | | -------- | ---------------- | | 文章列表頁面路由 | 返回文章列表頁面 | | 新增文章頁面路由 | 返回新增文章頁面 | | 文章保存功能路由 | 將文章保存到數(shù)據(jù)庫 | | 查看文章頁面路由 | 返回文章詳情頁面 | | 編輯文章頁面路由 | 返回編輯文章頁面 | | 編輯文章功能路由 | 將文章取出更新后重新保存到數(shù)據(jù)庫 | | 刪除文章功能路由 | 將文章從數(shù)據(jù)庫刪除 |

可以看到幾乎全部是對文章的數(shù)據(jù)操作路由,針對這種情況,Laravel 提供了非常方便的辦法:RESTful 資源控制器和路由。

打開routes.php加入如下代碼:

?
1
Route::resource('articles', 'ArticlesController');

只需要上面這樣一行代碼,就相當于創(chuàng)建了如下7條路由,且都是命名路由,我們可以使用類似route('articles.show') 這樣的用法。

?
1
2
3
4
5
6
7
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');

三、創(chuàng)建控制器

利用 artisan 創(chuàng)建一個文章控制器:

?
1
php artisan make:controller ArticlesController

四、創(chuàng)建基礎(chǔ)視圖

resources/views/layouts/art.blade.php

見模板index.html

五、新建文章表單

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
@extends('layouts.art')
@section('content')
 
 <form class="form-horizontal" method="post" action="{{route('blog.store')}}">
   {{ csrf_field() }}
 <div class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">標題</label>
 <div class="col-sm-8">
  <input type="title" class="form-control" id="title" name="title">
 </div>
 </div>
 
 <div class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">內(nèi)容</label>
 <div class="col-sm-8">
  <textarea class="form-control" rows="5" id="content" name="content"></textarea>
 </div>
 </div>
 
 <div class="form-group">
 <div class="col-sm-offset-2 col-sm-10">
  <button type="submit" class="btn btn-default">創(chuàng)建</button>
 </div>
 </div>
</form>
@endsection

六、文章存儲

此時如果你填寫新建文章表單點擊提交也會跳到一個空白頁面,同樣的道理,因為我們后續(xù)的控制器代碼還沒寫。

要實現(xiàn)文章存儲,首先要配置數(shù)據(jù)庫,創(chuàng)建數(shù)據(jù)表,創(chuàng)建模型,然后再完成存儲邏輯代碼。

1、配置數(shù)據(jù)庫

修改.env文件

2、創(chuàng)建數(shù)據(jù)表

利用 artisan 命令生成遷移:

?
1
php artisan make:migration create_articles_talbe --create=articles

修改遷移文件

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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');
 }

我們創(chuàng)建了一張 articles 表,包含遞增的 id 字段,字符串title字段,長文本content字段,和時間戳。

執(zhí)行數(shù)據(jù)庫遷移:

?
1
php artisan migrate

登錄mysql,查看數(shù)據(jù)表。

3、創(chuàng)建模型

利用 artisan 命令創(chuàng)建模型:

?
1
php artisan make:model Article

打開模型文件,輸入以下代碼:

app/Article.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
namespace App;
 
use Illuminate\Database\Eloquent\Model;
 
class Article extends Model
{
 //對應(yīng)的表
 protected $table = 'articles';
 //通過model可以寫入的字段
 protected $fillable = [
  'title', 'content',
 ];
}

4、存儲邏輯代碼

打開 ArticlesController.php 控制器,找到 store() 方法。

app/Http/Controllers/ArticlesController.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public function store(Request $request)
{
 //數(shù)據(jù)驗證 錯誤處理
 $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');
}

驗證錯誤顯示

?
1
2
3
4
5
6
7
8
9
@if (count($errors) > 0)
 <div class="alert alert-danger">
  <ul>
   @foreach($errors->all() as $error)
   <li>{{ $error }}</li>
   @endforeach
  </ul>
 </div>
@endif

七、文章列表展示

完成了添加文章功能后,就可以實現(xiàn)我們的文章列表展示頁了。

打開 ArticlesController.php 找到 index() 方法,添加代碼如下:

app/Http/Controllers/ArticlesController.php

?
1
2
3
4
5
6
7
8
use App\Article;
 
public function index()
 {
  $articles = Article::orderBy('created_at','asc')->get();
 
  return view('articles.index', ['articles'=>$articles]);
 }

視圖index.blade.php

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
@extends('layouts.art')
@section('content')
 
 <a class="btn btn-primary" href="{{route('blog.create')}}" rel="external nofollow" >添加文章</a>
 
 
 @foreach($articles as $article)
 <div class="panel panel-default">
 <div 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>
 </div>
 </div>
 @endforeach
 
 {!! $articles->render() !!}
 @endsection

八、編輯文章表單

編輯文章表單其實和之前創(chuàng)建的新建文章表單很類似,只是需要額外將現(xiàn)有的數(shù)據(jù)讀取出來填在表單上。

首先我們在文章列表頁的每個文章上添加一個編輯按鈕:

視圖:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@extends('layouts.art')
@section('content')
 
 <form class="form-horizontal" method="post" action="{{route('blog.update',$article->id)}}">
   {{ csrf_field() }}
  {{ method_field('PATCH') }}
 <div class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">標題</label>
 <div class="col-sm-10">
  <input type="title" class="form-control" id="title" name="title" value="{{ $article->title }}">
 </div>
 </div>
 
 
 <div class="form-group">
 <label for="inputEmail3" class="col-sm-2 control-label">內(nèi)容</label>
 <div class="col-sm-10">
  <textarea class="form-control" rows="5" id="content" name="content"> {{ $article->content }}</textarea>
 </div>
 </div>
 
 
 <div class="form-group">
 <div class="col-sm-offset-2 col-sm-10">
  <button type="submit" class="btn btn-default">修改</button>
 </div>
 </div>
</form>
@endsection

注意這段代碼中的 {{ method_field('PATCH') }} ,這是跨站方法偽造,HTML 表單沒有支持 PUT、PATCH 或 DELETE 動作。所以在從 HTML 表單中調(diào)用被定義的 PUT、PATCH 或 DELETE 路由時,你將需要在表單中增加隱藏的 _method 字段來偽造該方法,詳情參考 官方文檔。

控制器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//展示修改模板
public function edit($id)
 {
  $article = Article::findOrFail($id);
  return view('art.edit',['article'=>$article]);
 }
//執(zhí)行修改
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');
 }

九、刪除文章

刪除按鈕

?
1
2
3
4
5
<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>

控制器:

?
1
2
3
4
5
6
public function destroy($id)
 {
  $article = Article::findOrFail($id);
  $article->delete();
  return back();
 }

十、結(jié)語

本次實驗通過一個很簡單的迷你博客對 Laravel RESTful 資源控制器和路由,視圖,orm進行了強化練習。

好了,以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務(wù)器之家的支持。

原文鏈接:https://fjun.org/laravel-firstblog/

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 亚洲国产综合精品 | 五月天国产视频 | 欧美女孩videos| 欧美成a人片免费看久久 | yy8090韩国日本三理论免费 | 三上悠亚久久国产 | 大肥臀风间由美 中文字幕 大东北chinesexxxx露脸 | 久久99国产亚洲高清观着 | 欧美草逼网 | 亚洲第一区二区快射影院 | 欧美性黑人巨大gaysex | 91精品国产高清久久久久久 | 天天干天天爽天天操 | 成人精品视频一区二区在线 | 无码专区aaaaaa免费视频 | 亚洲va国产日韩欧美精品色婷婷 | 欧美三级不卡在线观线看高清 | 国产精品久久久久久网站 | 小仙夜晚慰自催眠mp3护士篇 | 国内久久精品视频 | 国产一区二区免费福利片 | 视频在线观看入口一二三2021 | 日韩精品免费一级视频 | 天天操天天做 | 视频国产精品 | 日韩a一级欧美一级 | 视频免费观看在线播放高清 | 日本不卡一区二区三区在线观看 | 成人观看免费观看视频 | 亚洲男人天堂影院 | 精品国产自在现线拍400部 | 无遮18禁在线永久免费观看挡 | 性色香蕉AV久久久天天网 | 国产日韩一区二区三区在线播放 | 插鸡网站| 国产成人小视频在线观看 | 男人都懂www深夜免费网站 | 高h全肉动漫在线观看免费 高h辣h双处全是肉军婚 | 国色天香社区视频免费观看3 | 沉沦艳妇杨幂肉体小说 | 99草视频|