Laravel Intro

安裝完設定主目錄到documentRoot

資料夾

  • storage:編譯後產生的檔案、log檔案,設定為可以寫入的權限
  • bootstrap:框架啟動加載的檔案
  • cache:加載後產生的檔案
  • vendor:composer命令模組
  • app:系統核心代碼

開權限

  • chmod -R 777 storage
  • chmod -R 777 bootstrap/cache

Artisan工匠

  • symfony console元件為基礎架構
  • php artisan list
  • php artisan --version
  • php artisan make:command SendEmails
  • php artisan make:controller CustomerController

定義路由

  • 與客戶端互動
  • 用routes/web.php定義web相關的routes
  • 用routes/api.php定義api相關的routes

路由動詞

  • get/post/delete/put
  • 符合所有any
  • 符合一部分match
  • url helper透過url()轉向

Laravel Eloquent

繼承了Eloquent就相當於幹了很多事情

中間流(Builder)

  • 建立了一個對象,在中間不斷地去改變它
  • 用::訪問某個function,無論是否為static,__construct()都不會被調用
  • Builder對象不能直接存取Article對象,需要轉成終結對象,才能調用到裡面的屬性

模型關係

ORM

  • 一對一:不需要中間表
  • 多對多:用take優化性能

PHP的問題

  • 一個網頁一個PHP:使用漏洞攻擊(MVC)
  • 缺乏統一寫法:一個人離開要了解寫法(Framework)
  • 每次都從頭開始:開發效率低(不用重新造輪子)

Framework和Library差異

  • 由開發者決定是否要用方法

四類Framework

  • codeIgniter:支援最廣(適合接案使用)
  • laravel:全功能(學習門檻高,底層用symfony)
  • slim:簡約(restful API使用)
  • phalcon:快速(C語言開發)

Laravel環境難裝

  • 用最新的PHP新功能
  • 用罕見的Extension

指令很多

  • composer:安裝套件
  • artisan:cli tool

體驗高手如何寫出OOP

  • 把商業邏輯無關又常常用到的功能抽出來
  • 套件為主的開發方式,名稱衝突問題(NameSpace)
  • ORM:SQL物件化
  • Migration:欄位開錯,版本控管
  • TDD:先寫測試在寫開發

TDD好處

  • 對Spec更加了解
  • 不用擔心重構的問題
  • 提早發現架構的問題

參考