1、概述
Valet是為Mac提供的極簡主義開發環境,沒有Vagrant、Apache、Nginx,也沒有 /etc/hosts檔案,甚至可以使用本地隧道公開共用你的網站。
在Mac中,當你啟動機器時,Laravel Valet總是在後台運行PHP內建的Web伺服器,然後通過使用 DnsMasq,Valet將所有請求代理到 *.dev網域名稱並指向本地機器安裝的網站。這樣一個極速的Laravel開發環境只需要佔用7M記憶體。
Valet並不是想要替代Vagrant或者Homestead,只是提供了另外一種選擇,更加靈活、極速、以及佔用更小的記憶體空間。
Valet為我們提供了以下軟體和工具:
- Laravel
- Lumen
- Statamic
- Craft
- WordPress
- Jigsaw
- 靜態HTML
當然,你還可以通過自訂的驅動擴充Valet。
Valet Or Homestead
正如你所知道的,Laravel 還提供了另外一個開發環境Homestead。Homestead和Valet的不同之處在於兩者的目標受眾和本地開發方式。Homestead提供了一個完整的包含自動化Nginx配置的Ubuntu虛擬機器,如果你需要一個完整的虛擬化Linux開發環境或者使用的是Windows/Linux作業系統,那麼Homestead無疑是最佳選擇。
Valet只支援Mac,並且要求本地安裝了PHP和資料庫伺服器,這可以通過使用 Homebrew命令輕鬆實現( brew install php70以及 brew install mariadb),Valet通過最小的資源消耗提供了一個極速的本地開發環境,如果你只需要PHP/MySQL並且不需要完整的虛擬化開發環境,那麼Valet將是最好的選擇。
最後,Valet和Homestead都是配置本地Laravel開發環境的好幫手,選擇使用哪一個取決於你個人的喜好或團隊的需求。
2、安裝
Valet要求Mac作業系統和 Homebrew。安裝之前,需要確保沒有其他程式如Apache或Nginx綁定到本地的80連接埠。安裝步驟如下:
- 使用 brew update安裝或更新Homebrew到最新版本
- 通過運行 brew services list確保 brew services有效並且能擷取到正確的輸出,如果無效,則需要 添加。
- 通過Homebrew安裝PHP 7.0: brew install php70。
- 通過Composer安裝Valet: composer global require laravel/valet(確保 ~/.composer/vendor/bin在系統路徑中)
- 運行 valet install命令,這將會配置並安裝Valet和DnsMasq,然後註冊Valet後台隨機啟動。
安裝完Valet後,嘗試使用命令如 ping foobar.dev在終端ping一下任意 *.dev網域名稱,如果Valet安裝正確就會看到來自 127.0.0.1的響應。
每次系統啟動的時候Valet後台會自動啟動,而不需要再次手動運行 valet start或 valet install。
資料庫
如果你需要資料庫,可以在命令列通過 brew install mariadb安裝MariaDB,安裝完成後就可以在本機通過使用者名稱 root和一個空密碼串連到資料庫。
3、服務網站
Valet安裝完成後,就可以啟動服務網站,Valet為此提供了兩個命令: park和 link
park命令
- 在Mac中建立一個新目錄,例如 mkdir ~/Sites,然後進入這個目錄並運行 valet park。這個命令會將當前所在目錄作為web根目錄。
- 接下來,在建立的目錄中建立一個新的Laravel網站: laravel new blog。
- 在瀏覽器中訪問 http://blog.dev。
這就是我們要做的全部工作。現在,所有在 Sites目錄中建立的Laravel項目都可以通過 http://folder-name.dev這種方式在瀏覽器中訪問,是不是很方便?
link命令
link命令也可以用於本地Laravel網站,這個命令在你想要在目錄中提供單個網站時很有用。
- 要使用這個命令,先切換到你的某個項目並運行 valet link app-name,這樣Valet會在 ~/.valet/Sites中建立一個符號連結指向當前工作目錄。
- 運行完 link命令後,可以在瀏覽器中通過 http://app-name.dev訪問。
要查看所有的連結目錄,可以運行 valet links命令。你也可以通過 valet unlink app-name來刪除符號連結。
4、分享網站
Valet還提供了一個命令用於將本地網站共用給其他人,這不需要任何額外工具即可實現。
要共用網站,切換到網站所在目錄並運行 valet share,這會產生一個可以公開訪問的URL並插入剪貼簿,以便你直接複製到瀏覽器地址欄,就是這麼簡單。
要停止分享網站,使用 Control + C即可。
5、查看日誌
如果你想要在終端顯示所有網站的日誌,可以運行 valet logs命令,這會在終端顯示新的日誌。
6、自訂Valet驅動
你還可以編寫自訂的Valet驅動為運行於非Valet原生支援的PHP應用提供服務。安裝完Valet時會建立一個 ~/.valet/Drivers目錄,該目錄中有一個 SampleValetDriver.php檔案,這個檔案中有一個示範如何編寫自訂驅動的樣本。編寫一個驅動只需要實現三個方法: serves、 isStaticFile和 frontControllerPath。
這三個方法接收 $sitePath、 $siteName和 $uri值作為參數,其中 $sitePath表示網站目錄,如 /Users/Lisa/Sites/my-project, $siteName表示主網域名稱部分,如 my-project,而 $uri則是輸入的請求地址,如/foo/bar。
編寫好自訂的Valet驅動後,將其放到 ~/.valet/Drivers目錄並遵循 FrameworkValetDriver.php這種命名方式,舉個例子,如果你是在為Wordpress編寫自訂的valet驅動,對應的檔案名稱為 WordPressValetDriver.php。
下面我們來具體討論並示範自訂Valet驅動需要實現的三個方法。
serves方法
如果自訂驅動需要繼續處理輸入請求, serves方法會返回 true,否則該方法返回 false。因此,在這個方法中應該判斷給定的 $sitePath是否包含你服務類型的項目。
例如,假設我們編寫的是 WordPressValetDriver,那麼對應 serves方法如下:
/** * Determine if the driver serves the request. * * @param string $sitePath * @param string $siteName * @param string $uri * @return void * @translator laravelacademy.org */public function serves($sitePath, $siteName, $uri){ return is_dir($sitePath.'/wp-admin');}
isStaticFile方法
isStaticFile方法會判斷輸入請求是否是靜態檔案,例片或樣式檔案,如果檔案是靜態,該方法會返回磁碟上的完整路徑,如果輸入請求不是請求靜態檔案,則返回 false:
/** * Determine if the incoming request is for a static file. * * @param string $sitePath * @param string $siteName * @param string $uri * @return string|false */public function isStaticFile($sitePath, $siteName, $uri){ if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) { return $staticFilePath; } return false;}
註: isStaticFile方法只有在 serves方法返回 true並且請求URI不是 /的時候才會被調用。
frontControllerPath方法
frontControllerPath方法會返回前端控制器的完整路徑,通常是 index.php:
/** * Get the fully resolved path to the application's front controller. * * @param string $sitePath * @param string $siteName * @param string $uri * @return string */public function frontControllerPath($sitePath, $siteName, $uri){ return $sitePath.'/public/index.php';}
7、其他Valet命令
命令 |
描述 |
valet forget |
從”parked”目錄運行該命令以便從parked目錄列表中移除該目錄 |
valet paths |
查看你的”parked”路徑 |
valet restart |
重啟Valet |
valet start |
啟動Valet |
valet stop |
關閉Valet |
valet uninstall |
卸載Valet |