SlideShare a Scribd company logo
1 of 69
Download to read offline
專案啟動與環境設定
范聖佑 Shengyou Fan
臺中科⼤大資⼯工系 (2015/05/30)
適
⽤用
5.0
版
單元主題
• 學習 Modern PHP 的網路應⽤用程式開發概念
• 學習 Composer 的操作指令
• 學習透過 Composer 及 laravel-installer 建⽴立全新的
Laravel 5.0 專案
• 了解 Laravel 的專案資料夾結構
• 了解 Laravel 的環境變數設定⽅方式
Modern	
  PHP	
  元件	
  
與	
  Composer	
  相依管理
常⾒見的 PHP 開發架構
瀏覽網⾴頁
使⽤用者端 HTTP
伺服器
網站根⺫⽬目錄
index.php
posts.php
inc/
libs/
共⽤用設定檔
應⽤用程式類別
函式庫 A
函式庫 B
classes/
bootstrap.php
依 URL 對應
⾄至各 php 檔案
可能⾯面臨的問題
• 瀏覽的路徑由檔名決定,網址較不好看;且曝露出
副檔名也讓別⼈人⾺馬上就知道伺服器端使⽤用的技術,
容易針對該語⾔言弱點進⾏行攻擊
• 所有的程式碼都放在 Document Root 底下,若
HTTP 伺服器沒有設定好或被破解,有可能讓所有源
始碼及系統設定等機敏資訊曝露出來
• 使⽤用的第三⽅方元件沒有統⼀一的管理機制,有可能發
⽣生相依缺漏或衝突
• 元件載⼊入的⽅方式沒有統⼀一的策略,每新增⼀一個元件
就得⼿手動修改 bootstrap 檔案,沒有效率且容易出錯
Modern PHP 的解決⽅方式
• 由 PHP-FIG 所推動的通⽤用元件規範,統⼀一了所有第
三⽅方元件的 namespace、autoload 的作法,讓所有的
元件開發者皆能依此遵循;也讓所有的元件使⽤用者
僅需學習⼀一種⽅方式就可以使⽤用任何第三⽅方元件
• 由社群主動推出 Composer 相依管理⼯工具,取代傳
統⼿手動剪貼或 Pear 過時的管理⽅方式,讓所有的開發
者都能透過指令很簡單的取得/載⼊入第三⽅方元件,也
能依同樣邏輯散佈⾃自⼰己的元件
更多詳細原理可參考
Modern PHP 第四章
更詳細的 Composer
說明可參考官網
Modern PHP 的開發架構
瀏覽網⾴頁
使⽤用者端 HTTP
伺服器 index.php
public/ 網站根⺫⽬目錄
應⽤用程式進⼊入點
vendor/
元件 A
元件 B
由 Composer 統⼀一
管理第三⽅方元件
config/
共⽤用設定檔
應⽤用程式類別
app/
⾃自⾏行依需求規劃應
⽤用程式⺫⽬目錄架構
PSR-4 類別對應點
什麼是 Composer?
• 早期的 PEAR 套件散佈⽅方式有諸多問題,造成⼤大多
數的 PHP 開發者往往重覆製造輪⼦子且難以共享開發
成果
• 現由 Composer + Packagist 取代,成為 Modern PHP
套件管理與散佈⽅方式
• 本單元將簡介幾個⼯工作坊會⽤用到的指令,讓學員熟
悉幾個必要的 Composer 指令操作
什麼是 Packagist?
• Modern PHP 的元件管理中⼼心,開發者在⾃自⼰己的
Github 上儲放源始碼,並到 Packagist 上登記,就可
以讓其他開發者取得該元件
• 在 Packagist 上⾯面可以查詢到所有開放源始碼的第三
⽅方元件的版本資訊、元件相依性及安裝/下載數等統
計資訊
• 簡⽽而⾔言之,Packagist 是尋找元件的地⽅方;Composer
是安裝元件的⼯工具
composer	
  [list]
• 顯⽰示 composer 所有的指令
• 若在下指令的時候,突然忘了指令的全名時,可以
先⽤用這個指令查詢⼀一下,再重新輸⼊入指令即可
• 範例:
$	
  composer	
  
$	
  composer	
  list
composer	
  {cmd}	
  -­‐-­‐help	
  
• 部份 composer 指令可接受額外參數,若⼀一時忘記參
數的使⽤用⽅方式時,可先加 --help 於該指令後⽅方,即
顯⽰示該指令的說明⽂文件,待確認⽤用法後再重新輸⼊入
指令
• 範例:
$	
  composer	
  list	
  -­‐-­‐help	
  
$	
  composer	
  install	
  -­‐-­‐help
$	
  composer	
  help	
  list	
  
$	
  composer	
  help	
  install
composer	
  self-­‐update
• Composer 本⾝身更新⾮非常頻繁,除了增加新功能、修
正錯誤外,也在逐步改善效能不彰的問題
• 請務必養成定期更新 Composer 的習慣,若超過 30
天沒有更新,在使⽤用 Composer 指令時,也會有更
新提⽰示
• 範例:
$	
  composer	
  self-­‐update	
  
$	
  composer	
  selfupdate
$	
  [sudo]	
  composer	
  self-­‐update
現在就更新!
建⽴立專案	
  Skeleton
★ 參考⽂文件:http://laravel.com/docs/5.0/installation
Modern PHP 框架的 Skeleton
• 由於 PHP-FIG 組織的成⽴立、Composer 的興起,各
Modern PHP 框架在新版都將框架內的各功能組件獨
⽴立成 PHP 元件。因此,就算不是使⽤用該框架的開發
者,也能使⽤用該框架的元件另作他途
• ⽽而各框架為了讓其開發者有⼀一個「啟始包」,可以迅
速的架起⼀一個網路應⽤用程式雛型。因此,各框架也將
⾃自⼰己的框架 Skeleton 包裝成⼀一個 Composer 元件
• 在 Laravel 的世界裡,laravel/laravel 這個
Composer 元件就是 Laravel 框架的 Skeleton。我們可
以透過 composer	
  create-­‐project 來啟動⼀一個專案
在 Packagist 上查詢元件資訊
$	
  composer	
  create-­‐project	
  laravel/laravel	
  -­‐-­‐prefer-­‐dist
(⽤用 Composer 建⽴立 Laravel 專案 skeleton)
composer	
  create-­‐project
• Composer 可以透過 create-project 指令將某個元件
做為建⽴立專案啟始包的⼀一種⽅方式
• ⺫⽬目前各主流框架都是透過這種⽅方式來建⽴立 Skeleton,
⽽而⾮非傳統下載 zip 檔
• 範例:
$	
  composer	
  create-­‐project	
  vendor/package	
  {target-­‐directory}	
  
[version]	
  -­‐-­‐prefer-­‐dist
參數說明:	
  	
  
vendor:元件開發者名稱	
  
package:元件名稱	
  
target-­‐directory:預定建⽴立的資料夾名稱	
  
version:預定使⽤用的版本	
  
-­‐-­‐prefer-­‐dist:使⽤用	
  zip	
  散佈檔⽽而不要	
  clone	
  整個源始碼
採⽤用 laravel-­‐installer 安裝
• Composer 在取得套件相依資訊及下載元件時的速度
會受到機器運算能⼒力及網路下載速度影響其運⾏行速
度
• 為了加快產⽣生專案啟始包的速度,Laravel 官⽅方釋出
laravel-­‐installer 指令列⼯工具,讓我們可以迅速
的完成 composer	
  create-­‐project 所執⾏行的動作
• 在使⽤用之前,需要先安裝 Composer Global Package
才能取⽤用 laravel-­‐installer 指令
composer	
  global
• ⼤大多數的 Composer 元件是獨⽴立安裝於各別專案
內,但 Composer 元件也可以做為散佈指令列⼯工具
的⼀一種⽅方式。
• 透過將元件以 global 的⽅方式安裝,Composer 會將該
元件安裝在 COMPOSER_HOME ⺫⽬目錄底下,將
COMPOSER_HOME/vendor/bin 加⼊入 PATH 後,即可
全域使⽤用該指令
• 範例:
$	
  composer	
  global	
  reguire	
  vender/package:version
$	
  composer	
  global	
  require	
  laravel/installer:"~1.2"
(安裝	
  laravel-­‐installer)
★ 套件會安裝⾄至 COMPSER_HOME:
  Windows 位置:C:UsersUSERNAMEAppDataRoamingComposervendorbin
  *nix 位置:~/.composer/vendor.bin
設定環境變數 (PATH)
• 需要在作業系統裡將 Composer Global Package 的路
徑設定⾄至環境變數內,這樣當我們執⾏行指令時,作
業系統才能知道該去哪裡尋找我們要執⾏行的程式
• 環境變數裡可以設定多個路徑位置,作業系統會依
照填寫路徑的順序逐⼀一去尋找指令程式。若都找不
到才會回傳錯誤
• 各家作業系統設定⽅方式略有不同,請參考各作業系
統環境變數設定的教學。若使⽤用 wagon 的話,在
cmder 啟動時會⾃自動載⼊入搭配預載 Composer 的
Global Package 位置進環境變數內
export	
  PATH=$PATH:~/.composer/vendor/bin
(*nix	
  作業系統在	
  .bashrc	
  裡加⼊入	
  PATH)
★ $PATH 的前後順序是有影響的,請依需求⾃自⾏行調整
@set	
  COMPOSER_HOME=%WAGON_ROOT%composer	
  
@set	
  PATH=%COMPOSER_HOME%vendorbin
(wagon	
  則是在	
  wagoncmdervendorinit.bat	
  裡設定)
$	
  laravel	
  new	
  [project-­‐name]
(速度++)
★ 官⽅方⽂文件:http://laravel.com/docs/5.0#install-laravel
⽤用 laravel-installer 建⽴立 laravel 專案 skeleton
移除不必要檔案
• 專案內的說明檔可以移除,包括:
- readme.md
驗證安裝成功
• 開啟 UwAmp,確認 Document Root 指向 Laravel 專
案的 public,並啟動 Server
• 打開瀏覽器:http://localhost:8000
確認
安裝成功
Laravel	
  資料夾結構
★ 參考⽂文件:http://laravel.com/docs/5.0/structure
兩個 composer 檔案
根⺫⽬目錄底下有兩個 Composer 檔案:composer.json 及 composer.lock,
是⽤用來設定 Laravel 套件相依性之⽤用
解析 composer.json
{	
  
	
   "name":	
  "{vendor}/{package-­‐name}",	
  
	
   "description":	
  "{package	
  description}",	
  
	
   "keywords":	
  ["{keyword1}",	
  "{keyword2}"],	
  
	
   "license":	
  "{license}",	
  
	
   "type":	
  "project",	
  
	
   "require":	
  {	
  
	
   	
   "laravel/framework":	
  "5.0.*"	
  
	
   },	
  
	
   "require-­‐dev":	
  {	
  
	
   	
   "phpunit/phpunit":	
  "~4.0",	
  
	
   	
   "phpspec/phpspec":	
  "~2.1"	
  
	
   },	
  
	
  	
  	
  /*	
  以下暫略	
  */	
  
}
私有專案⽤用:proprietary
格式:"vendor/package-­‐name":	
  "version"
composer.lock 的作⽤用
• 每當 Composer 分析完套件相依性、決定此次要安
裝的元件時,就會將每⼀一個元件的安裝版本資訊寫
⼊入 composer.lock 檔內
• 如同其名,lock 檔的作⽤用就是把⺫⽬目前的相依性「鎖
定」在這個檔案裡。換⾔言之,當團隊內的其他成員
拿到源始碼時,只要執⾏行 composer install,就可以
安裝⼀一模⼀一樣的元件版本,避免發⽣生成員間因元件
版本不同⽽而產⽣生的開發錯誤
• 總⾔言之,請把 composer.lock 放⼊入版本控制系統內
app
app 是 Laravel 程式核⼼心 class 集中放置處,由於 Laravel 5.0 已全⾯面⽀支
援 PSR-4 規範,在此資料夾內新增 class 時,請依規範加 namespace
PSR-4 載⼊入設定
{	
  
	
  	
  	
  /*	
  以上暫略	
  */	
  
	
   "autoload":	
  {	
  
	
   	
   "classmap":	
  [	
  
	
   	
   	
   "database"	
  
	
   	
   ],	
  
	
   	
   "psr-­‐4":	
  {	
  
	
   	
   	
   "App":	
  "app/"	
  
	
   	
   }	
  
	
   },	
  
	
   "autoload-­‐dev":	
  {	
  
	
   	
   "classmap":	
  [	
  
	
   	
   	
   "tests/TestCase.php"	
  
	
   	
   ]	
  
	
   },	
  
	
  	
  	
  /*	
  以下暫略	
  */	
  
}
依	
  PSR-­‐4	
  載⼊入	
  class	
  設定	
  
新增	
  class	
  在	
  app	
  資料夾
時,請注意	
  namespace
config
config 是 Laravel 放置所有設定檔的資料夾,不論是 Laravel 原⽣生提供
的設定或是其他套件提供的設定檔皆是放置在此
database
database 資料夾內有兩個⼦子資料夾。migrations 放置所有資料庫變更紀
錄的操作 class;seeds 則是放置產⽣生測試假資料⽤用的 class
public
public 資料夾是 HTTP 伺服器設定 Document Root 的位置,裡⾯面的
index.php 是應⽤用程式進⼊入點,還包括所有公開檔案如 css, robots.txt…
resources
resources 資料夾內有三個資料夾,分別放置 views 樣板檔案、lang 多
國語系對照表以及 assets 各種前端素材
vendor
vendor 資料夾是所有透過 Composer 安裝的第三⽅方套件,⼀一般⽽而⾔言不
需要更動裡⾯面的內容,在版本控制系統裡也會忽略它
使⽤用git建⽴立第⼀一個存檔點
建⽴立新儲存庫
選定位置後啟始儲存庫
SmartGit 主畫⾯面
commit 變更
操作回應與歷史紀錄
歷史線圖
git ⼯工作流程概念
★ 圖⽚片來源:http://thkoch2001.github.io/whygitisbetter/images/local-remote.png
.gitignore
• 有⼀一些檔案 (⽐比⽅方說 IDE 的設定檔) 我們不想要放到
版本控制系統裡,希望 git 可以⾃自動忽略這些檔案
• 只要把想忽略的規則寫⼊入 .gitignore 裡並 commit 到
儲存庫,⽇日後 git 就會⾃自動忽略這些檔案
存檔點
• 試著把現在已經可以運作的程式碼加⼊入版本控制內
• 流程提醒:
- 建⽴立⼀一個新的儲存庫
- working directory > staging area > commit
Laravel	
  環境設定
★ 參考⽂文件:http://laravel.com/docs/5.0/configuration#environment-configuration
開發流程與階段
[ development ]
開發⽤用、測試⽤用
[ local ]
本機端開發
[ staging ]
階段性發佈
[ production ]
正式上線
每個開發夥伴本機端
獨⽴立開發,開發完成
後送回版本控制系統
[version control]
原始碼管理
定期從版本控制系統
取出後,進⾏行整合、
單元等測試
專案階段完成後,進
⾏行階段性發佈,給客
⼾戶測試、確認
所有階段完成後佈署
⾄至正式主機,對外公
開使⽤用
什麼是環境設定?
• 如上圖,在⼀一個網路應⽤用程式的開發過程中,程式
碼會依照不同的開發階段被部署在不同的機器上
• 常⾒見的實際狀況是,不同開發階段的機器可能會有
不同的設定值,如 DB 名稱、DB 帳號、DB 密碼等
• 在以往的作法裡,可能會將這些設定值寫死在⼀一個
config.php 的檔案內,並在所有的⾴頁⾯面裡載⼊入
• 將設定值寫死在程式碼內並放到版本控制系統裡,
除了會有機敏資訊曝光的⾵風險,在更換機器時也會
需求⼿手動修改這個檔案以適應不同的機器,無法讓
部署流程⾃自動化
Laravel 的環境設定設計
• Laravel 的環境設定設計,是透過在根⺫⽬目錄放置⼀一
個 .env 的設定檔,在設定檔內紀錄所有的設定值。
⽽而在程式運⾏行時,透過 env('CONFIG_KEY') 載⼊入設
定檔內的設定值
• .env 這個檔案預設就設定在 .gitignore 裡排除。也就
是說,.env 這個檔案不會被送⼊入版本控制系統內,
以免除機敏資訊被公開的⾵風險
• 透過環境變數的設計,讓程式碼可動態適應不同機
器上的不同設定,減少佈署時需⼿手動調整設定的負
擔
如何知道⺫⽬目前的環境?
$	
  php	
  artisan	
  env
使⽤用 artisan 指令查尋⺫⽬目前的環境
什麼是 artisan?
• Laravel 專屬的指令列⼯工具,協助我們完成⽇日常繁瑣
⼯工作事務,如:
• 最佳化 (optimize) 應⽤用程式
- 清快取 (cache)、控制 queue
- tinker 模式、maintenance 模式
• 可簡化眾多開發⼯工作及時程,如:
- ⾃自動幫忙產⽣生想要的 class skeleton,少打⼀一些鍵盤
- ⾃自動最佳化 Laravel、啟動常⽤用的⼯工具
$	
  [php]	
  artisan	
  env
了解⺫⽬目前	
  Laravel	
  使⽤用的環境設定
artisan	
  env
• 回傳 Laravel ⺫⽬目前所在環境
- artisan 會回傳⺫⽬目前 Laravel ⺫⽬目前的環境變數設定
• 範例:
$	
  php	
  artisan	
  env
如何修改環境設定?
APP_ENV=local	
  
APP_DEBUG=true	
  
APP_KEY=SomeRandomString	
  
DB_HOST=localhost	
  
DB_DATABASE=homestead	
  
DB_USERNAME=homestead	
  
DB_PASSWORD=secret
編輯 .env 檔案
透過 artisan 驗證
$	
  php	
  artisan	
  env
設定/產⽣生 APP_KEY
• 在環境設定檔 (.env) 裡,有⼀一個 APP_KEY,是
Laravel 在應⽤用程式運作時,⽤用做加密運算使⽤用的
Key 值,其為⼀一組 32 字元⻑⾧長的隨機字串
• 在建⽴立新專案時,Composer 會透過 post-­‐create-­‐
project-­‐cmd 內的指令來產⽣生⼀一組新的 Key,並將
其紀錄在 .env 檔案內
• 產⽣生 APP_KEY 也可以透過 artisan 指令來重新產
⽣生
$	
  [php]	
  artisan	
  key:generate
產⽣生	
  Laravel	
  要使⽤用的	
  APP_KEY	
  並存在	
  .env	
  內
artisan	
  key:generate
• 產⽣生 APP_KEY
- artisan 會產⽣生⼀一組 32 字元⻑⾧長的隨機字串,並將其
紀錄在 .env 裡
• 範例:
$	
  php	
  artisan	
  key:generate	
  
Application	
  key	
  [xxxxxxxxxxxxxxxxxx]	
  set	
  successfully
Shell	
  常⽤用指令補充
ls	
  [opt]	
  {path}
• List = 列出檔案列表
- [ -a ] 列出所有(包含隱藏)檔案
- [ -l ] 以列表的⽅方式呈現
• 範例:
$	
  ls	
  -­‐la
cd	
  {path}
• Change Directory = 切換⼯工作⺫⽬目錄
- { . } 當前⺫⽬目錄
- { .. } 回到上⼀一層⺫⽬目錄
• 範例:
$	
  cd	
  ../	
  
$	
  cd	
  Projectsblog
mkdir	
  {directory}
• Make Directory = 建⽴立資料夾
• 範例:
$	
  mkdir	
  blog	
  
$	
  mkdir	
  my_project
rm	
  [opt]	
  {file/dir}
• Remove = 刪除檔案
- [ -r ] 刪除資料夾
- [ -f ] 強制刪除 (不詢問)
• 範例:
$	
  rm	
  test.txt	
  
$	
  rm	
  -­‐r	
  test_folder	
  
$	
  rm	
  -­‐rf	
  *.txt
mv	
  {from}	
  {to}
• Move = 移動/重新命名檔案
- { from } 來源路徑
- { to } ⺫⽬目標路徑
• 範例:
$	
  mv	
  test.txt	
  ../	
  
$	
  mv	
  test.txt	
  test.html
clear
• clear = 清空螢幕
- 當指令打太多,想要有個乾淨的螢幕時可以使⽤用的
指令
• 範例:
$	
  clear
⼩小技巧
• ⾃自動補完
- 在輸⼊入指令時,若⼀一時忘記指令的全名時,可按鍵
盤 Tab 鍵數次,若該指令在系統有設定提⽰示時,會
出現對應的提⽰示,再依提⽰示將指令補完即可送出
單元總結
• 在這個單元裡我們學到了些什麼?
- 如何透過兩種⽅方式建⽴立新的 Laravel 專案
- 了解 Laravel 的專案資料夾結構
- 如何設定 Laravel 的環境變數
- composer、artisan 及各種開發所謂的指令列⼯工具
Q & A
歡迎提問討論

More Related Content

What's hot

應用程式佈署
應用程式佈署應用程式佈署
應用程式佈署Shengyou Fan
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 SeedingShengyou Fan
 
開發工具與環境建置
開發工具與環境建置開發工具與環境建置
開發工具與環境建置Shengyou Fan
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制Shengyou Fan
 
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南Shengyou Fan
 
使用 laravel 的前與後
使用 laravel 的前與後使用 laravel 的前與後
使用 laravel 的前與後Shengyou Fan
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向Shengyou Fan
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者Shengyou Fan
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
開發環境建置
開發環境建置開發環境建置
開發環境建置Shengyou Fan
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發俊仁 陳
 
應用程式部署
應用程式部署應用程式部署
應用程式部署Shengyou Fan
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用Shengyou Fan
 

What's hot (20)

應用程式佈署
應用程式佈署應用程式佈署
應用程式佈署
 
Model 設定與 Seeding
Model 設定與 SeedingModel 設定與 Seeding
Model 設定與 Seeding
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 
開發工具與環境建置
開發工具與環境建置開發工具與環境建置
開發工具與環境建置
 
Route 路由控制
Route 路由控制Route 路由控制
Route 路由控制
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 
COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南COSCUP 2016 Laravel 部署工作坊 - 部署指南
COSCUP 2016 Laravel 部署工作坊 - 部署指南
 
使用 laravel 的前與後
使用 laravel 的前與後使用 laravel 的前與後
使用 laravel 的前與後
 
PHP 語法基礎與物件導向
PHP 語法基礎與物件導向PHP 語法基礎與物件導向
PHP 語法基礎與物件導向
 
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
[PHPConf Taiwan 2015] 跟著 Laravel 5.1 一起成為更好的 PHP 開發者
 
Composer 套件管理
Composer 套件管理Composer 套件管理
Composer 套件管理
 
工作坊簡介
工作坊簡介工作坊簡介
工作坊簡介
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
開發環境建置
開發環境建置開發環境建置
開發環境建置
 
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
LaravelConf Taiwan 2017 單頁面應用與前後端分離開發
 
Route路由控制
Route路由控制Route路由控制
Route路由控制
 
應用程式部署
應用程式部署應用程式部署
應用程式部署
 
View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Package安裝與使用
Package安裝與使用Package安裝與使用
Package安裝與使用
 
驗證與訊息
驗證與訊息驗證與訊息
驗證與訊息
 

Viewers also liked

View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎Shengyou Fan
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定Shengyou Fan
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹Shengyou Fan
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合Shengyou Fan
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作Shengyou Fan
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORMShengyou Fan
 

Viewers also liked (15)

View 與 Blade 樣板引擎
View 與 Blade 樣板引擎View 與 Blade 樣板引擎
View 與 Blade 樣板引擎
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
Eloquent ORM
Eloquent ORMEloquent ORM
Eloquent ORM
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
CRUD 綜合應用
CRUD 綜合應用CRUD 綜合應用
CRUD 綜合應用
 
專案啟動與設定
專案啟動與設定專案啟動與設定
專案啟動與設定
 
開發流程與工具介紹
開發流程與工具介紹開發流程與工具介紹
開發流程與工具介紹
 
Model & Seeding整合
Model & Seeding整合Model & Seeding整合
Model & Seeding整合
 
Schema & Migration操作
Schema & Migration操作Schema & Migration操作
Schema & Migration操作
 
使用者認證
使用者認證使用者認證
使用者認證
 
使用 Eloquent ORM
使用 Eloquent ORM使用 Eloquent ORM
使用 Eloquent ORM
 
工作坊總結
工作坊總結工作坊總結
工作坊總結
 
Route 機制
Route 機制Route 機制
Route 機制
 
整合 Open ID
整合 Open ID整合 Open ID
整合 Open ID
 
使用 Controller
使用 Controller使用 Controller
使用 Controller
 

Similar to 專案啟動與環境設定

Laravel 5.2 教學
Laravel 5.2 教學Laravel 5.2 教學
Laravel 5.2 教學Cloud Wu
 
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletJustin Lin
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作Shengyou Fan
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJustin Lin
 
Wamp环境下安装 wordpress
Wamp环境下安装 wordpressWamp环境下安装 wordpress
Wamp环境下安装 wordpressstrugglesmen
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训Cody Zhang
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索Will Huang
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训ytsolar
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0國昭 張
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践self study
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践rewinx
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践Frank Cai
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorialazole Lai
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发mysqlops
 
Ceph customize ap is for programmatic access with python
Ceph customize ap is for programmatic access with pythonCeph customize ap is for programmatic access with python
Ceph customize ap is for programmatic access with pythonBo-Yu Chen
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略Will Huang
 
Phalcon phpconftw2012
Phalcon phpconftw2012Phalcon phpconftw2012
Phalcon phpconftw2012Rack Lin
 
Phalcon the fastest php framework 阿土伯
Phalcon   the fastest php framework 阿土伯Phalcon   the fastest php framework 阿土伯
Phalcon the fastest php framework 阿土伯Hash Lin
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來Shengyou Fan
 

Similar to 專案啟動與環境設定 (20)

Laravel 5.2 教學
Laravel 5.2 教學Laravel 5.2 教學
Laravel 5.2 教學
 
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 ServletServlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
Servlet & JSP 教學手冊第二版 - 第 2 章:撰寫與設定 Servlet
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDEJava SE 8 技術手冊第 2 章 - 從JDK到IDE
Java SE 8 技術手冊第 2 章 - 從JDK到IDE
 
Wamp环境下安装 wordpress
Wamp环境下安装 wordpressWamp环境下安装 wordpress
Wamp环境下安装 wordpress
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索ASP.NET MVC 6 新功能探索
ASP.NET MVC 6 新功能探索
 
Maven初级培训
Maven初级培训Maven初级培训
Maven初级培训
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
Asp.net core v1.0
Asp.net core v1.0Asp.net core v1.0
Asp.net core v1.0
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践高性能Web服务器Nginx及相关新技术的应用实践
高性能Web服务器Nginx及相关新技术的应用实践
 
Docker tutorial
Docker tutorialDocker tutorial
Docker tutorial
 
基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发基于Symfony框架下的快速企业级应用开发
基于Symfony框架下的快速企业级应用开发
 
Ceph customize ap is for programmatic access with python
Ceph customize ap is for programmatic access with pythonCeph customize ap is for programmatic access with python
Ceph customize ap is for programmatic access with python
 
DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略DEV305 - ASP.NET 5 開發攻略
DEV305 - ASP.NET 5 開發攻略
 
Phalcon phpconftw2012
Phalcon phpconftw2012Phalcon phpconftw2012
Phalcon phpconftw2012
 
Phalcon the fastest php framework 阿土伯
Phalcon   the fastest php framework 阿土伯Phalcon   the fastest php framework 阿土伯
Phalcon the fastest php framework 阿土伯
 
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
[Modern Web 2016] 讓你的 PHP 開發流程再次潮起來
 

More from Shengyou Fan

[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
 
[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
 

More from Shengyou Fan (20)

[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 打造多平台應用程式
 
[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
 

專案啟動與環境設定