亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 語言 > PHP > 正文

利用laravel搭建一個迷你博客實戰教程

2024-05-04 23:59:25
字體:
來源:轉載
供稿:網友

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

一、設計與思路

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

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

二、創建路由

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

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

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

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

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

只需要上面這樣一行代碼,就相當于創建了如下7條路由,且都是命名路由,我們可以使用類似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'); 

三、創建控制器

利用 artisan 創建一個文章控制器:

php artisan make:controller ArticlesController 

四、創建基礎視圖

resources/views/layouts/art.blade.php

見模板index.html

五、新建文章表單

@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">內容</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">創建</button> </div> </div></form> @endsection

六、文章存儲

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

要實現文章存儲,首先要配置數據庫,創建數據表,創建模型,然后再完成存儲邏輯代碼。

1、配置數據庫

修改.env文件

2、創建數據表

利用 artisan 命令生成遷移:

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'); }

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

執行數據庫遷移:

php artisan migrate 

登錄mysql,查看數據表。

3、創建模型

利用 artisan 命令創建模型:

php artisan make:model Article 

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

app/Article.php

namespace App;use Illuminate/Database/Eloquent/Model;class Article extends Model { //對應的表 protected $table = 'articles'; //通過model可以寫入的字段 protected $fillable = [  'title', 'content', ];}

4、存儲邏輯代碼

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

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'); }

驗證錯誤顯示

@if (count($errors) > 0) <div class="alert alert-danger">  <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 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

八、編輯文章表單

編輯文章表單其實和之前創建的新建文章表單很類似,只是需要額外將現有的數據讀取出來填在表單上。

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

視圖:

@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">內容</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 表單中調用被定義的 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" 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進行了強化練習。

好了,以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VeVb武林網的支持。

 

注:相關教程知識閱讀請移步到PHP教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91最新在线免费观看| 国产精品久久久久久久久| 蜜月aⅴ免费一区二区三区| 欧美一区二区三区……| 国内精品视频久久| 国产玖玖精品视频| 国产日产欧美a一级在线| 亚洲色图欧美制服丝袜另类第一页| 伊人久久精品视频| 亚洲精品xxx| 日韩免费在线视频| 欧美激情视频一区二区| 国产精品成人一区| 国产精品极品美女在线观看免费| 国产精品入口夜色视频大尺度| 日韩**中文字幕毛片| 久久九九全国免费精品观看| 欧洲亚洲免费在线| 国产精品福利在线观看| 97久久精品人人澡人人爽缅北| 久久亚洲精品中文字幕冲田杏梨| 亚洲第一福利网站| 亚洲欧美在线看| 国产精品白嫩初高中害羞小美女| 亚洲女成人图区| 国产精品美女www| 富二代精品短视频| 国产午夜精品一区二区三区| 国产精品亚洲第一区| 欧美激情第1页| 日韩精品视频在线免费观看| 色妞久久福利网| 久久久久久亚洲精品中文字幕| 中文字幕亚洲欧美一区二区三区| 国产精品入口免费视| 欧美午夜性色大片在线观看| 综合av色偷偷网| 欧美性xxxxxxx| 国产剧情日韩欧美| 一本色道久久综合亚洲精品小说| 亚洲成色777777在线观看影院| 高清欧美一区二区三区| 九九热在线精品视频| 国外成人在线直播| 成人国产精品色哟哟| 欧美中文字幕精品| 国外视频精品毛片| 国产精品高潮呻吟久久av无限| 国产999精品久久久影片官网| 欧美激情精品久久久久久蜜臀| 国产精品久久久久福利| 91最新在线免费观看| 日本一区二区在线免费播放| 久久人人爽国产| 中文字幕国产精品久久| 国产欧美最新羞羞视频在线观看| 亚洲成人黄色在线观看| 亚洲电影免费观看高清完整版在线观看| 欧美xxxx18性欧美| 亚洲国产欧美一区二区三区同亚洲| 亚洲欧美综合精品久久成人| 欧美极品少妇xxxxⅹ免费视频| 欧美性jizz18性欧美| 国产成人精品最新| 亚洲人免费视频| 91久久精品国产91久久| 国产精品第3页| 欧美精品在线视频观看| 国产精品国产福利国产秒拍| 91日本在线观看| 欧美一级大片在线观看| 一本色道久久88综合亚洲精品ⅰ| 色噜噜亚洲精品中文字幕| 91在线视频精品| 日韩大陆毛片av| 爽爽爽爽爽爽爽成人免费观看| 国产91精品高潮白浆喷水| 日韩在线视频导航| 亚洲日韩欧美视频一区| 成人字幕网zmw| 亚洲人在线观看| 国产午夜精品美女视频明星a级| 26uuu日韩精品一区二区| 久久精品最新地址| 色噜噜久久综合伊人一本| 97视频人免费观看| 久久这里只有精品视频首页| 91中文在线观看| 久久五月情影视| 久久久久国色av免费观看性色| 色琪琪综合男人的天堂aⅴ视频| 91在线无精精品一区二区| 国产亚洲精品美女久久久| 国产亚洲成精品久久| 国产精品亚洲аv天堂网| 成人黄色av网| 激情久久av一区av二区av三区| 国产视频久久网| 成人av在线天堂| 欧美一级淫片aaaaaaa视频| 97精品久久久| 日韩精品在线免费观看视频| 久久免费少妇高潮久久精品99| 亚洲白虎美女被爆操| 91社影院在线观看| 日韩电影网在线| 亚洲美女在线视频| 欧美日韩一区二区免费在线观看| 国内精品久久久久久久久| 伊人久久男人天堂| 欧美综合激情网| 成人在线免费观看视视频| 成人a在线观看| 亚洲精品白浆高清久久久久久| 久久手机精品视频| 欧美一级bbbbb性bbbb喷潮片| 亚洲人成在线观看| 欧美精品aaa| 欧美国产视频一区二区| 亚洲天堂第一页| 欧美日韩免费网站| 国产a级全部精品| 国产精品久久久久久网站| 51视频国产精品一区二区| 久久亚洲春色中文字幕| 欧美黑人极品猛少妇色xxxxx| www.国产一区| 国产精品一区久久久| 欧美视频专区一二在线观看| 夜夜躁日日躁狠狠久久88av| 日韩在线视频免费观看高清中文| 欧美大尺度在线观看| 成人精品久久一区二区三区| 亚洲综合日韩在线| 91久久在线视频| 成人h片在线播放免费网站| 欧美日韩国产综合新一区| 亚洲天堂av在线播放| 日韩精品视频在线| 欧美电影免费观看高清完整| 亚洲美女性视频| 亚洲欧洲一区二区三区久久| 久久97精品久久久久久久不卡| 午夜欧美不卡精品aaaaa| 亚洲欧美日韩中文视频| 欧美性猛交xxxx乱大交3| 日韩高清有码在线| 久久亚洲精品成人| 久久久久北条麻妃免费看| 欧美洲成人男女午夜视频| 黑人巨大精品欧美一区二区| 色老头一区二区三区| 欧美在线激情视频| 992tv成人免费视频| 一区二区欧美在线| 久久91亚洲精品中文字幕| 国产精品igao视频| 色综合天天综合网国产成人网| 欧美电影免费观看网站| 亚洲国产欧美精品| 国产成人精品av在线| 国产亚洲aⅴaaaaaa毛片| 最近免费中文字幕视频2019| 亚洲精品美女在线|