国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > 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教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 来凤县| 阿荣旗| 南京市| 建瓯市| 临海市| 曲水县| 三台县| 宜兰市| 汝南县| 定边县| 大城县| 建始县| 卓资县| 衡阳市| 嵊州市| 凌源市| 沧源| 威海市| 绥化市| 历史| 周口市| 馆陶县| 石狮市| 海口市| 黄山市| 尉氏县| 阿合奇县| 泾源县| 五寨县| 铁力市| 普定县| 乐至县| 那坡县| 孟州市| 常熟市| 紫阳县| 平顺县| 当涂县| 友谊县| 上饶市| 安阳市|