SlideShare a Scribd company logo
1 of 24
Download to read offline
CRUD綜合運⽤用
范聖佑 Shengyou Fan
臺中科⼤大資⼯工系 (2015/06/14)
適
⽤用
5.0
版
單元主題
• 了解何謂 CRUD?以及 CRUD 對應的動作
• 安裝 Form Builder 產⽣生表單 DOM
• 學習 Laravel 在表單功能上的安全防禦
• 了解更多 Eloquent 特殊功能
• ⽰示範實作專案 CRUD 功能
CRUD	
  簡介
什麼是 CRUD?
• CRUD = 針對⼀一個 resource 的標準四個操作
- Create 建⽴立資料
- Read 讀取資料
- Update 更新資料
- Delete 刪除資料
RESTful 動作對應
• Laravel 的 RESTful Controler 動作對應依以下表格:
動詞 路徑 動作 名稱
GET /resource index resource.index
GET /resource/create create resource.create
POST /resource store resource.store
GET /resource/{id} show resource.show
GET /resource/{id}/edit edit resource.edit
PUT/PATCH /resource/{id} update resource.update
DELETE /resource/{id} destroy resource.destroy
Route 動作設定
• 設定 Route 動作改對應⾄至相應的 Controller
• 也可以⽤用 RESTful Resource Controllers,⼀一⾏行抵數⾏行
//	
  app/Http/routes.php	
  
Route::get(/*	
  略	
  */);	
  
Route::post(/*	
  略	
  */);	
  
Route::patch(/*	
  略	
  */);	
  
Route::delete(/*	
  略	
  */);
//	
  app/Http/routes.php	
  
Route::resource('posts',	
  'PostsController');
使⽤用	
  Form	
  Builder
⽤用 Form Builder 產⽣生 DOM
• 直接在View 裡寫 HTML DOM 是絕對沒有問題的
• 但若是可以⽤用 Form Builder 來產⽣生 HTML 的話,還
可以搭配 Model ⾃自動產⽣生⼀一些 DOM,省去⾃自⼰己寫
HTML 的時間
• Form Builder 在 Laravel 4 以前都是內建的,Laravel 5
以後從核⼼心原始碼移出來,若想⽤用的話要⾃自⼰己裝:
-­‐ "illuminate/html":	
  "^5.0"	
  
-­‐ "laravelcollective/html":	
  "^5.0"
開啟/關閉表單
• 開啟表單
• Model 綁定
• 關閉表單
★ 參考:http://laravel.tw/docs/4.2/html#opening-a-form
Form::open(['url'	
  =>	
  '{foo/bar}',	
  'method'	
  =>	
  'POST'])	
  
Form::open(['route'	
  =>	
  '{route.name}',	
  'method'	
  =>	
  'POST'])
Form::model($post,	
  ['route'	
  =>	
  ['{route.name}',	
  $post-­‐>id]])
Form::close()
產⽣生表單元素
• 產⽣生 Input、Label、Textarea
• 產⽣生 Submit 按鈕
Form::label('{input	
  name}',	
  '{display	
  text}')	
  
Form::text('{field	
  name}',	
  '{value}',	
  [{opts	
  array}])	
  
Form::email('{field	
  name}',	
  '{value}',	
  [{opts	
  array}])	
  
Form::textarea('{field	
  name}',	
  '{value}',	
  [{opts	
  array}])	
  
Form::radio('{field	
  name}',	
  '{value}',	
  {default})
Form::submit('{field	
  name}',	
  [{opt_array}])
View 上⾯面產⽣生表單
• 在View 上⾯面產⽣生需要使⽤用的表單 HTML,並指定動
作⾄至對應的 Route
//	
  resources/views/posts/create.blade.php	
  
Form::open(['route'	
  =>	
  'posts.store',	
  'method'	
  =>	
  'POST'])	
  
/*	
  略	
  */	
  
Form::close()	
  
//	
  resources/views/posts/edit.blade.php	
  
//	
  $post	
  是	
  Model	
  
Form::model($post,	
  ['route'	
  =>	
  ['posts.update',	
  $post-­‐>id],	
  
'method'	
  =>	
  'PATCH'])	
  
/*	
  略	
  */	
  
Form::close()
CRUD	
  綜合運⽤用
寫⼊入資料
• 在 Controller 裡接受表單送來的資料,並⽤用 Model
把資料寫⼊入資料庫
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  store()	
  
{	
  
	
   $post	
  =	
  AppPost::create(Input::all());	
  
dd($post);	
  
}
更新資料
• 在 Controller 裡接受表單送來的資料,並⽤用 Model
把資料更新⾄至資料庫
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  update($id)	
  
{	
  
	
   $post	
  =	
  AppPost::find($id);	
  
	
   $post-­‐>update(Input::all());	
  
dd($post);	
  
}
刪除資料
• 在 Controller 裡接受表單送來的資料,並⽤用 Model
把資料從資料庫裡刪除
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  destroy($id)	
  
{	
  
AppPost::destroy($id);	
  
dd('destroy');	
  
}
⾴頁⾯面跳轉
• 操作資料庫的動作完成後,依照需求把跳轉⾄至指定
的⾴頁⾯面
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  store()	
  
{	
  
	
   $post	
  =	
  AppPost::create(Input::all());	
  
	
   return	
  redirect()-­‐>route('posts.show',	
  $post-­‐>id);	
  
}	
  
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  destroy($id)	
  
{	
  
	
   AppPost::destroy($id);	
  
	
   return	
  redirect()-­‐>route('posts.index');	
  
}
⾃自動分⾴頁
• Laravel 的 Model 在取筆數時,可以⾃自動幫我們做分
⾴頁,在⾴頁⾯面上也可以⾃自動幫我們產⽣生 Bootstrap 的
Pagination 元件
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  index()	
  
{	
  
	
   $posts	
  =	
  AppPost::orderBy('created_at',	
  'desc')	
  
	
   	
   	
   	
   	
   	
  	
  -­‐>paginate(10);	
  //paginate($perPage)	
  
	
   $data	
  =	
  compact('posts');	
  
	
   return	
  view('posts.index',	
  $data);	
  
}	
  
//	
  resources/views/posts/index.blade.php	
  
<div	
  class="text-­‐center">	
  
	
   {!!	
  $posts-­‐>render()	
  !!}	
  
</div>
隨機⽂文章
• Laravel 的 Collection 可以直接幫我們從中隨機取出
⼀一⾄至數個內容,只需要呼叫 random() 即可
//	
  app/Http/Controllers/PostsController.php	
  
public	
  function	
  random()	
  
{	
  
	
   $post	
  =	
  AppPost::all()-­‐>random();	
  //random($number)	
  
	
   $data	
  =	
  compact('post');	
  
	
   return	
  view('posts.show',	
  $data);	
  
}
實作專案	
  CRUD
實作 CRUD
• 依據⼯工作坊網站企劃書,實作不同 resource 的
CRUD 如下:
- 針對聯絡我們做 C
- 針對留⾔言做 CR
- 針對⽂文章內容做 CRUD
• 提⽰示:
- 使⽤用 Form Builder 並綁定 Model 產⽣生 DOM
- 記得要設定 ServiceProvider、Aliases 及⽤用 {!! 輸出
Eloquent 延伸⽤用法
• 在 隨機⽂文章 ⾴頁裡使⽤用 Model::random() 取得隨機
的⼀一篇⽂文章,再把該⽂文章傳⾄至View 進⾏行顯⽰示
• 在 ⾸首⾴頁(熱⾨門⽂文章) 及 ⽂文章總覽兩⾴頁裡,加上
Model::paginate() 讓 Laravel ⾃自動幫我們完成分
⾴頁查詢,並在View 裡⾯面產⽣生分⾴頁選單連結
存檔點
• 試著把現在已經可以運作的程式碼加⼊入版本控制內
• 流程提醒:
- working directory > staging area > commit
單元總結
• 在這個單元裡我們學到了些什麼?
- CRUD 基本觀念及慣例
- 使⽤用 Form Builder 整合 Model 產⽣生 DOM
- Eloquent 的額外⽤用法
- 表單的安全防禦
- 實作專案所需的 CRUD 功能
Q & A
歡迎提問討論

More Related Content

What's hot

View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹Shengyou Fan
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作Shengyou Fan
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 SeedingShengyou Fan
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制Shengyou Fan
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 

What's hot (20)

View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 
Package 安裝與使用
Package 安裝與使用Package 安裝與使用
Package 安裝與使用
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
CRUD 綜合應用
CRUD 綜合應用CRUD 綜合應用
CRUD 綜合應用
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Route路由控制
Route路由控制Route路由控制
Route路由控制
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 

Viewers also liked

Viewers also liked (13)

應用程式部署
應用程式部署應用程式部署
應用程式部署
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用
 
專案啟動與環境設定
專案啟動與環境設定專案啟動與環境設定
專案啟動與環境設定
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
使用者認證
使用者認證使用者認證
使用者認證
 
應用程式佈署
應用程式佈署應用程式佈署
應用程式佈署
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定
 
課程簡介
課程簡介課程簡介
課程簡介
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 
Route 機制
Route 機制Route 機制
Route 機制
 
使用者認證
使用者認證使用者認證
使用者認證
 

Similar to CRUD 綜合運用

Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniterChun-Kai Wang
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xBo-Yi Wu
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發Weizhong Yang
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發koji lin
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
Html5开发android应用程序概述
Html5开发android应用程序概述Html5开发android应用程序概述
Html5开发android应用程序概述kevin_yanggl
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejsChi-wen Sun
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0) My own sweet home!
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backboneJerry Xie
 
Script with engine
Script with engineScript with engine
Script with engineWebrebuild
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
大型互联网应用架构设计
大型互联网应用架构设计大型互联网应用架构设计
大型互联网应用架构设计thinkinlamp
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作FEG
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1modou li
 
Inside the browser
Inside the browserInside the browser
Inside the browserotakustay
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013modou li
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析CC
 

Similar to CRUD 綜合運用 (20)

Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 
Introduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.xIntroduction to MVC of CodeIgniter 2.1.x
Introduction to MVC of CodeIgniter 2.1.x
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發給 iOS 工程師的 Flutter 開發
給 iOS 工程師的 Flutter 開發
 
山頂洞人日記 - 回歸到最純樸的開發
山頂洞人日記 -  回歸到最純樸的開發山頂洞人日記 -  回歸到最純樸的開發
山頂洞人日記 - 回歸到最純樸的開發
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
Html5开发android应用程序概述
Html5开发android应用程序概述Html5开发android应用程序概述
Html5开发android应用程序概述
 
Backbone js and requirejs
Backbone js and requirejsBackbone js and requirejs
Backbone js and requirejs
 
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0) 開放原始碼 Ch2.5   app - oss - 3rd party api(ver 1.0)
開放原始碼 Ch2.5 app - oss - 3rd party api(ver 1.0)
 
前端MVC之backbone
前端MVC之backbone前端MVC之backbone
前端MVC之backbone
 
Script with engine
Script with engineScript with engine
Script with engine
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
大型互联网应用架构设计
大型互联网应用架构设计大型互联网应用架构设计
大型互联网应用架构设计
 
線上埋碼資料收集實作
線上埋碼資料收集實作線上埋碼資料收集實作
線上埋碼資料收集實作
 
Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1Uliweb cheat sheet_0.1
Uliweb cheat sheet_0.1
 
Inside the browser
Inside the browserInside the browser
Inside the browser
 
Uliweb比较与实践 2013
Uliweb比较与实践 2013Uliweb比较与实践 2013
Uliweb比较与实践 2013
 
基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析基于 FRIDA 的全平台逆向分析
基于 FRIDA 的全平台逆向分析
 

More from Shengyou Fan

[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...Shengyou Fan
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀Shengyou Fan
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能Shengyou Fan
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023Shengyou Fan
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀Shengyou Fan
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台Shengyou Fan
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇Shengyou Fan
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseShengyou Fan
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具Shengyou Fan
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園Shengyou Fan
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin MultiplatformShengyou Fan
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率Shengyou Fan
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南Shengyou Fan
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用Shengyou Fan
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜Shengyou Fan
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具Shengyou Fan
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS AggregatorShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON APIShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin ServerlessShengyou Fan
 
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置Shengyou Fan
 

More from Shengyou Fan (20)

[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
[JCConf 2023] 從 Kotlin Multiplatform 到 Compose Multiplatform:在多平台間輕鬆共用業務邏輯與 U...
 
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
[Kotlin 讀書會第五梯次] 深入淺出 Kotlin 第一章導讀
 
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
[WebConf Taiwan 2023] 一份 Zend Engine 外帶!透過 Micro 讓一次打包、多處運行變得可能
 
How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023How I make a podcast website using serverless technology in 2023
How I make a podcast website using serverless technology in 2023
 
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
[Effective Kotlin 讀書會] 第八章 Efficient collection processing 導讀
 
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
[MOPCON 2022] 以 Kotlin Multiplatform 制霸全平台
 
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
[JCConf 2022] Compose for Desktop - 開發桌面軟體的新選擇
 
Using the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your DatabaseUsing the Exposed SQL Framework to Manage Your Database
Using the Exposed SQL Framework to Manage Your Database
 
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
[COSCUP 2022] 讓黑畫面再次偉大 - 用 PHP 寫 CLI 工具
 
[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園[COSCUP 2022] Kotlin Collection 遊樂園
[COSCUP 2022] Kotlin Collection 遊樂園
 
初探 Kotlin Multiplatform
初探 Kotlin Multiplatform初探 Kotlin Multiplatform
初探 Kotlin Multiplatform
 
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
簡化 JVM 上雲 - 透過 Azure Spring Cloud 提升開發、發佈及服務監控效率
 
[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南[PHP 也有 Day #64] PHP 升級指南
[PHP 也有 Day #64] PHP 升級指南
 
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
以 Kotlin Multiplatform Mobile (KMM) 開發跨平台行動應用
 
Composer 經典食譜
Composer 經典食譜Composer 經典食譜
Composer 經典食譜
 
老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具老派浪漫:用 Kotlin 寫 Command Line 工具
老派浪漫:用 Kotlin 寫 Command Line 工具
 
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
[Kotlin Serverless 工作坊] 單元 4 - 實作 RSS Aggregator
 
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
[Kotlin Serverless 工作坊] 單元 3 - 實作 JSON API
 
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
[Kotlin Serverless 工作坊] 單元 2 - 簡介 Kotlin Serverless
 
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
[Kotlin Serverless 工作坊] 單元 1 - 開發環境建置
 

CRUD 綜合運用

  • 2. 單元主題 • 了解何謂 CRUD?以及 CRUD 對應的動作 • 安裝 Form Builder 產⽣生表單 DOM • 學習 Laravel 在表單功能上的安全防禦 • 了解更多 Eloquent 特殊功能 • ⽰示範實作專案 CRUD 功能
  • 4. 什麼是 CRUD? • CRUD = 針對⼀一個 resource 的標準四個操作 - Create 建⽴立資料 - Read 讀取資料 - Update 更新資料 - Delete 刪除資料
  • 5. RESTful 動作對應 • Laravel 的 RESTful Controler 動作對應依以下表格: 動詞 路徑 動作 名稱 GET /resource index resource.index GET /resource/create create resource.create POST /resource store resource.store GET /resource/{id} show resource.show GET /resource/{id}/edit edit resource.edit PUT/PATCH /resource/{id} update resource.update DELETE /resource/{id} destroy resource.destroy
  • 6. Route 動作設定 • 設定 Route 動作改對應⾄至相應的 Controller • 也可以⽤用 RESTful Resource Controllers,⼀一⾏行抵數⾏行 //  app/Http/routes.php   Route::get(/*  略  */);   Route::post(/*  略  */);   Route::patch(/*  略  */);   Route::delete(/*  略  */); //  app/Http/routes.php   Route::resource('posts',  'PostsController');
  • 8. ⽤用 Form Builder 產⽣生 DOM • 直接在View 裡寫 HTML DOM 是絕對沒有問題的 • 但若是可以⽤用 Form Builder 來產⽣生 HTML 的話,還 可以搭配 Model ⾃自動產⽣生⼀一些 DOM,省去⾃自⼰己寫 HTML 的時間 • Form Builder 在 Laravel 4 以前都是內建的,Laravel 5 以後從核⼼心原始碼移出來,若想⽤用的話要⾃自⼰己裝: -­‐ "illuminate/html":  "^5.0"   -­‐ "laravelcollective/html":  "^5.0"
  • 9. 開啟/關閉表單 • 開啟表單 • Model 綁定 • 關閉表單 ★ 參考:http://laravel.tw/docs/4.2/html#opening-a-form Form::open(['url'  =>  '{foo/bar}',  'method'  =>  'POST'])   Form::open(['route'  =>  '{route.name}',  'method'  =>  'POST']) Form::model($post,  ['route'  =>  ['{route.name}',  $post-­‐>id]]) Form::close()
  • 10. 產⽣生表單元素 • 產⽣生 Input、Label、Textarea • 產⽣生 Submit 按鈕 Form::label('{input  name}',  '{display  text}')   Form::text('{field  name}',  '{value}',  [{opts  array}])   Form::email('{field  name}',  '{value}',  [{opts  array}])   Form::textarea('{field  name}',  '{value}',  [{opts  array}])   Form::radio('{field  name}',  '{value}',  {default}) Form::submit('{field  name}',  [{opt_array}])
  • 11. View 上⾯面產⽣生表單 • 在View 上⾯面產⽣生需要使⽤用的表單 HTML,並指定動 作⾄至對應的 Route //  resources/views/posts/create.blade.php   Form::open(['route'  =>  'posts.store',  'method'  =>  'POST'])   /*  略  */   Form::close()   //  resources/views/posts/edit.blade.php   //  $post  是  Model   Form::model($post,  ['route'  =>  ['posts.update',  $post-­‐>id],   'method'  =>  'PATCH'])   /*  略  */   Form::close()
  • 13. 寫⼊入資料 • 在 Controller 裡接受表單送來的資料,並⽤用 Model 把資料寫⼊入資料庫 //  app/Http/Controllers/PostsController.php   public  function  store()   {     $post  =  AppPost::create(Input::all());   dd($post);   }
  • 14. 更新資料 • 在 Controller 裡接受表單送來的資料,並⽤用 Model 把資料更新⾄至資料庫 //  app/Http/Controllers/PostsController.php   public  function  update($id)   {     $post  =  AppPost::find($id);     $post-­‐>update(Input::all());   dd($post);   }
  • 15. 刪除資料 • 在 Controller 裡接受表單送來的資料,並⽤用 Model 把資料從資料庫裡刪除 //  app/Http/Controllers/PostsController.php   public  function  destroy($id)   {   AppPost::destroy($id);   dd('destroy');   }
  • 16. ⾴頁⾯面跳轉 • 操作資料庫的動作完成後,依照需求把跳轉⾄至指定 的⾴頁⾯面 //  app/Http/Controllers/PostsController.php   public  function  store()   {     $post  =  AppPost::create(Input::all());     return  redirect()-­‐>route('posts.show',  $post-­‐>id);   }   //  app/Http/Controllers/PostsController.php   public  function  destroy($id)   {     AppPost::destroy($id);     return  redirect()-­‐>route('posts.index');   }
  • 17. ⾃自動分⾴頁 • Laravel 的 Model 在取筆數時,可以⾃自動幫我們做分 ⾴頁,在⾴頁⾯面上也可以⾃自動幫我們產⽣生 Bootstrap 的 Pagination 元件 //  app/Http/Controllers/PostsController.php   public  function  index()   {     $posts  =  AppPost::orderBy('created_at',  'desc')                -­‐>paginate(10);  //paginate($perPage)     $data  =  compact('posts');     return  view('posts.index',  $data);   }   //  resources/views/posts/index.blade.php   <div  class="text-­‐center">     {!!  $posts-­‐>render()  !!}   </div>
  • 18. 隨機⽂文章 • Laravel 的 Collection 可以直接幫我們從中隨機取出 ⼀一⾄至數個內容,只需要呼叫 random() 即可 //  app/Http/Controllers/PostsController.php   public  function  random()   {     $post  =  AppPost::all()-­‐>random();  //random($number)     $data  =  compact('post');     return  view('posts.show',  $data);   }
  • 20. 實作 CRUD • 依據⼯工作坊網站企劃書,實作不同 resource 的 CRUD 如下: - 針對聯絡我們做 C - 針對留⾔言做 CR - 針對⽂文章內容做 CRUD • 提⽰示: - 使⽤用 Form Builder 並綁定 Model 產⽣生 DOM - 記得要設定 ServiceProvider、Aliases 及⽤用 {!! 輸出
  • 21. Eloquent 延伸⽤用法 • 在 隨機⽂文章 ⾴頁裡使⽤用 Model::random() 取得隨機 的⼀一篇⽂文章,再把該⽂文章傳⾄至View 進⾏行顯⽰示 • 在 ⾸首⾴頁(熱⾨門⽂文章) 及 ⽂文章總覽兩⾴頁裡,加上 Model::paginate() 讓 Laravel ⾃自動幫我們完成分 ⾴頁查詢,並在View 裡⾯面產⽣生分⾴頁選單連結
  • 23. 單元總結 • 在這個單元裡我們學到了些什麼? - CRUD 基本觀念及慣例 - 使⽤用 Form Builder 整合 Model 產⽣生 DOM - Eloquent 的額外⽤用法 - 表單的安全防禦 - 實作專案所需的 CRUD 功能