Laravel 建置與執行及相關筆記
Contents
Laravel 建置與執行
1.為甚麼要使用Laravel
- 為甚麼要使用框架
- Laravel
- Lumen
- Slim
- 歷史
- Ruby on rails
- CodeIgniter
- Laravel
- Laravel 的設計哲學
- 使用與光有關的字眼
- illuminate 照亮
- spark 火花
- 提升開發速度和開發者的幸福
- 使用與光有關的字眼
- Laravel 社群
2.設置Laravel 開發環境與介紹
- 系統需求
- Composer
- 本地開發環境
- Laravel Valet (mac)
- Laravel Homestead
- vagrant up
- vagrant suspend
- vagrant halt
- vagrant destroy
- vagrant provision
- laravel new & composer create-project
- Laravel 的目錄結構
3.路由與控制器
|
|
- 路由動詞
- Get 觀看
- Post 新增
- Put/Patch 更新
- Delete 刪除
- any
1
Route::any('/',function(){})
- match
1
Route::match(['get','post'],'/',function(){})
- 中介層 middleware
- 在進入controller 之前 過濾request 的條件和身分等
- 有controller construct 和 route 定義兩種方式宣告
- 使用視圖組件讓所有視圖共用變數
|
|
-
Controller
方法名稱 動詞 URL index get tasks show get tasks/{task} create get tasks/create store post tasks edit get tasks/{task}/edit update post (put or patch) tasks/{task} destroy post (delete) tasks/{task} -
路由模型綁定
定義一個特定的參數名稱 如{task} 來指示路由解析器,他應該用那個的id 來尋找而不是傳統將id 傳入
- 顯式與隱式
- 路由快取
壓榨載入時間的每毫秒
|
|
- 方法欺騙: method_field() 或者 input-name:_method
- CSRF
- 轉址 redirect
- 中止請求
- abort(403)
- abort_if(condition,403)
- abort_unless(condition,403)
- 回應 response
- response()->make() 建立一個http 回應
- response()->json()
- response()->download()
4.Blade 模板
|
|
- 自動blade 指令
- 全域共用變數
|
|
5.前端套件
- laravel-mix
6.收集與處理用戶資料
- Request
- all()
- except() or only()
- has() or exist()
- input() 提供第二個參數是預設值
- json()
- 路由資料
- segment()
- 上傳檔案
- $request->hasfile() and $request->file()
- guessExtension
- getMimeType
- move()
- getClientOriginalName()
- getClientOriginalExtension()
- isValid()
- …..其他(p.102)
- 驗證
- $this->validate($request,[rules]);
- 表單請求 php artisan make:request Arequest
- authorize()
- rule / message
- withErrors 顯示錯誤訊息
- 規則可以看文件
- Eloquent 模型的大量賦值
- $fillable in model
- {{ … }} v.s {!! … !!}
7.Artisan 與 Tinker
|
|
- 可以同時生成model 和migration 和controller
|
|
8.資料庫與Eloquent
- Laravel 的 ActiveRecord ORM
- config/database.php
- migration 資料庫遷移
- 系統會依據日期執行他的up/down方法
- 定義 migration
- up() 作他的migration
- down() 恢復他
- 建立 migration
php artisan make:migration create_users_table
php artisan make:migration add_votes_to_users_table --table=users php artisan make:migration create_users_table --create=users
撰寫 migration <a href="https://laravel.com/docs/5.5/migrations">請參考文件</a>
seeder
指令php artisan migrate --seed
php artisan migrate:refresh --seed
php artisan db:seed
php artisan db:seed --class=VotesTableSeeder #分別執行
php artisan make:seeder ContactsTableSeeder
撰寫seeder 請參考<a href="https://laravel.com/docs/5.5/seeding">文件</a>
- 查詢產生器
- 任何一種資料庫的功能核心都是查詢產生器
- 原生DB 靜態介面寫法
php= DB::statement('drop table users') DB::select('select * from student where id=?',[1]) $users=DB::table('users')->get() #....其他如join where insert 等 略
- 限制方法
- select()
- where()
- orwhere()
- whereBetween()
- whereIn()
- whereNull() whereNotNull()
- whereRaw()
- whereExists()
- distinct
- 修改方法
- orderBy groupbY having() havingRaw()
- skip() take()
- latest() oldest()
- inRandomOrder() 隨機排序結果
- 結束回傳方法
- get()
- first() firstOrFail()
- value() 拉出某個欄位
- count()
- min() max()
- sum() avg()
- 聯集與聯結
- join()
- union()
- 增加 更新 刪除
- insert()
- update()
- delete()
- json 的操作
如果你的資料有json 格式可以這樣寫1 2 3 4
//查詢 DB:table('users')->where('options->isAdmin',true)->get() //更新 DB:table('users')->update(['options->isAdmin',true)
- 限制方法
- Eloquent 模型請參考文件
Eloquent 雖有獨有all 方法,但本書建議不要使用~
- Eloquent 模型序列化
- 將某種複雜的東西轉換成字串 toArray() toJson()
- https://laravel.com/docs/5.5/eloquent-serialization
9.用戶身分驗證與授權
- php artisan make:auth
- https://laravel.com/docs/5.5/authentication
- 守衛
- config/auth.php
- auth()->guard(‘user’)->user()
- 授權 ACL
- in blade: can cannot allows denies
- can
- gete
- policy
10.請求與回應
- 請求生命週期
- 每一個請求都會轉成 Illuminate Request 物件 經過middleware 過濾請求後進入controller 處理好後就產生 Illuminate Response
- request
- resonse
- middleware
- 每一個請求都會經過每一個middleware 最後進入應用程式,之後產生的回應會經過middleware回到用戶
11.容器
- 相依注入
- 每一個類別的相依關係都是從外面住入的 而不是在類別中實例化的
- 控制反轉
- app() 全域輔助函式
- 將類別綁定容器
- 告知容器如果有人要求一個Logger 實例,則執行這段程式
12.測試
- Laravel 內建 PHPUnit、Behat、Mockery、Faker 等
- 單元測試
- 測試對象是小型、相對獨立的單位,通常是一個類別或方法
- 整合測試
- 測試各個單位合作及傳遞訊息的方式
- 應用測試
- 驗收或功能測試,測試整個應用程式的行為
- 在根目錄執行 .\vendor\bin\phpunit
- 文件
- php artisan make:test GreetTest
- 在feature 資料夾裡面增加一個GreetTest.php 繼承TestCase
- phpunit 會跑feature 和unit 裡的每一個測試
- $this->get/post/put/patch/delete
- $this->json
- $this->followRedirects
- 各種的asset 測試方法
- 自我練習
- Browser Tests (Laravel Dusk)
- 測試特徵
- withoutMiddleware
- databasemigrations
- databasetransactions
13.編寫API
- 類REST JSON API 基礎
- 一種用來建構API 的架構格式
- URL 可以獨特的表示一種資源
- 使用HTTP動詞來和資源互動
- CRUD
- Laravel Passport 作 API 身分驗證
composer require laravel/passport
在config/app.php providers 加入 Laravel\PassportServiceProvider::class
php artisan passport:install
將HasApiTokens 的trait 加入 App\user
- http://www.itread01.com/content/1496308818.html'
- http://codingweb.tw/2016/12/23/laravel-5-3-api-%E8%AA%8D%E8%AD%89-authentication-passport/
14.儲存與取出
- 本地與雲端檔案管理器
- config/filesystems.php
- storage_path() 輔助函式
|
|
- 使用Storage 靜態介面
- Storage::disk(‘s3’)->get(‘file.jpg’)
- get()
- put()
- putFile(‘dir’,$file)
- exists()
- copy(old,new)
- move(old,new)
- prepend() 在前面加
- append() 在後面加
- delete()
- deleteDirectory()
- size()
- lastModified
- files(dir)
- allFiles(dir) +子目錄內的
- directories()
- allDirectories()
- Session
- Laravel 的session 管理器支援:檔案、cookie、資料庫、Memcached、Redis
|
|
- Flash session 儲存
- 只想要在下一個網頁載入時抹除它
|
|
- 快取
- 快取中的資料是為每一個應用程式儲存的;而session 中的資料是為每一個用戶儲存的
- config/cache.php
- https://laravel.com/docs/5.5/cache
- cache()->get(key,fallbackvalue)
- cache()->pull(key,fallbackvalue)
- cache()->put(key,value,minutesOrExpiration)
- cache()->add(key,value)
- cache()->forever(key,value)
- cache()->has()
- cache()->remember(key,minutes,closure) / cache()->rememberForever(key,closure)
- cache()->increment(key,amount) / cache()->decrement(key,amount)
- cache()->forget() / cache()->flush()
- Cookie
- https://laravel.com/docs/5.5/requests#cookies
- Laravel Scout 作全文搜尋
- 可為Eloquent 模型加入全文搜尋
- Algolia預設驅動程式
- 要改成elasticsearch 請另外找辦法
15.郵件與通知
- 郵件
- https://laravel.com/docs/5.5/mail
- config/mail.php
- classic
- mailable
- 傳統郵件 classic
|
|
-
Mailable 本地開發
-
log驅動程式
-
Mailtrap.io
-
Universal to
-
通知 Notification
-
php artisan make:notification WorkoutAvailable
16.佇列、工作、事件、廣播與排程器
-
佇列可以將昂貴或緩慢的程序移出任何同步呼叫 ex.傳送郵件
-
config/queue.php
-
事件
-
event()
-
監聽事件
- php artisan make:listener jobname –event=UserSubscribed
-
將事件廣播到WebSocket 與 Laravel Echo
-
排程器
- cron job in linux
- app\console\kernel.php
- $schedule
17.輔助函式與集合
Laravel 的中大型專案架構
1.Model : 僅當成 Eloquent class。
2.Repository : 輔助 model,處理資料庫邏輯,然後注入到 service。
3.Service : 輔助 controller,處理商業邏輯,然後注入到 controller。
4.Controller : 接收 HTTP request,調用其他 service。
5.Presenter : 處理顯示邏輯,然後注入到 view。
6.View : 使用 blade 將資料 binding 到 HTML。
7.Transformer :轉換顯示欄位(API)
8.Formatter: 格式的統一顯示格式(API)
9.Foundation: 獨立掛載功能
總結
- 職責單一: 就是說每次修改都會有個地方變動而已,所以每個類別都只會有一種改變的理由
- 跟夥伴們取得一個共識:讓他們知道這樣的設計和方法可以帶來時麼樣的好處,建立一個良好的溝通
Laravel 外掛整理
Debug
- Laravel-tracy
- vscode-handler:使用vs-code一鍵開檔
- laravel debugbar
開發相關
- laravel-model-generator:生成laravel model
- laravel-oh-generators:生成優美laravel 架構
驗證
- laravel-jsvalidation:Laravel 和前端的規則可以共用
權限
- laravel-entrust:使用者權限劃分
管理後台
- 管理後台平台外掛 類似Django 自帶後台?
Ruby on rail Scaffold
- Laravel 類似Ruby on rail 的scaffole 指令
Office
- laravel excel
- laravel word
Notification 通知
- laravel flash
Log
- laravel5 log viewer
開發
- laravelcollective HTML
- laravel dom-pdf
資料庫備份
- laravel-backup
Datatable
其它
- laravel dusk (瀏覽器測試)
- laravel-fractal (創建api)
- doctrine DBAL (更優的數據表操作)
- intervention image(用於修改及創造圖片)
- Laravel 寫log 的建議方法
- https://laravel-china.org/topics/2530/the-highest-amount-of-downloads-of-the-100-laravel-extensions-recommended
- 每一個laravel 安裝的package 有哪些
Laravel 的Carbon 小技巧
1.本地化
|
|
2.七個小技巧
https://9iphp.com/web/php/less-known-useful-carbon-functions.html
- isX :True/False
|
|
- isBirthday
|
|
- StartOfX 和 EndOfX 列表
|
|
- Today, Tomorrow, Yesterday
|
|
- DiffForHumans + 本地化
|
|
- 改变 now() 为任意你想要的时间
|
|
- 星期常量
|
|
相關資源
- 理解laravel 核心概念
- 套件管理-軍火庫
- 教程
- sample code
- 更有效率的laravel
- 更深層的laravel
- phpconf筆記
- 使用 Laravel & Vue.js 打造即時資訊看板
- laravel 優美架構
- 每一個laravel 安裝的package 有哪些
- laravel小技巧
- laravel 開源項目大全
- Redis 應用
- 如何經營 Side Project 拿到 1K 顆星星
- https://medium.com/@guitarbien