代客泊車
- #其它Valet 指令
- Laravel Valet#Valet 還是Homestead
- #Park 指令#使用TLS 建立安全站點
簡介
Valet 是 Mac 極簡主義者的 Laravel 開發環境。沒有 Vagrant,不需要設定 /etc/hosts
檔案。甚至可以使用本地隧道公開分享你的網站。 Yeah, we like it too.
Laravel Valet 為您的 Mac 設定了開機後始終在後台運行 Nginx 服務。然後,Valet 使用 DnsMasq 將所有指向安裝在本地的電腦網站請求代理到 *.test
結尾的網域上。
換句話說,一個速度極快的 Laravel 開發環境只佔用 7MB 記憶體。 Valet 並不是想要完全替換 Vagrant 或 Homestead,只是提供另一種使用起來更加靈活、方便、以及內存佔用更小的選擇。
Valet 支援但不限於以下內容:
- Laravel
- Lumen
- Bedrock
- CakePHP 3
- Concrete5
- Contao
- #Craft
- #Drupal
- Jigsaw
- Joomla
- #Katana
- Kirby
- Magento
- OctoberCMS
- #Sculpin
- Slim
- Statamic
- #Static HTML
- Symfony
- WordPress
- Zend
#當然,您也可以使用自訂驅動器 來擴充您的Valet。
Valet 還是 Homestead
您應該知道,Laravel 還提供了另外一種本地開發環境 Homestead。 Homestead 和 Valet 的不同之處在於目標受眾和本地開發的方式。 Homestead 提供了一個完整的、具有自動化的 Nginx 配置的 Ubuntu 虛擬機器。如果你想在 Windows/Linux 上實現完全虛擬化的 Linux 開發環境,Homestead 是一個不錯的選擇。
Valet 只支援 Mac,並要求你將 PHP 和資料庫伺服器直接安裝到本機上。這可以很容易地透過使用 Homebrew
指令來實現,例如 brew install php
和 brew install mysql
。 Valet 提供了一個極快的、資源消耗最少本地開發環境,非常適合只需要 PHP/MySQL 並且不需要虛擬開發環境的開發人員。
Valet 和 Homestead 都是配置 Laravel 開發環境的絕佳選擇。選擇哪一個只取決於個人喜好和團隊的需求。
安裝
Valet 需要 macOS 系統和 Homebrew。在安裝之前,請確保沒有其它程式(如 Apache 或 Nginx)佔用了本機的 80 連接埠。
- 使用
brew update
將 Homebrew 安裝或更新到最新版本。 - 使用 Homebrew 的
brew install php
指令安裝 PHP 7.3。 - 安裝 Composer.
- 使用 Composer 的
composer global require laravel/valet
指令安裝 Valet。並確保~/.composer/vendor/bin
目錄在系統的 "PATH" 中。 - 運行
valet install
指令來設定和安裝 Valet 和 DnsMasq,並註冊 Valet 後台服務,隨系統運行自行啟動。
安裝完Valet 後,可以嘗試使用類似ping foobar.test
的指令在終端機上ping 任何一個*.test
的域名。如果 Valet 安裝正確,可以在終端機上看到來自 127.0.0.1
的回應。
每次機器啟動時,Valet 會自動啟動其進程。所以只要完成了 Valet 的初始化,就不需要再執行 valet start
或 valet install
。
使用其它網域
預設情況下,Valet 使用 .test
頂級網域為你的專案提供服務。如果你想使用其它域名,可以使用 valet domain tld-name
指令。
例如,如果你想使用.app
來取代.test
,執行valet domain app
,Valet 會自動將網站頂層網域改為*.app
。
資料庫
如果你要使用資料庫,請在終端機上執行 brew install mysql@5.7
安裝 MySQL。一旦安裝完成,你可以使用 brew services start mysql
指令啟動 MySQL。然後,你可以使用 root
使用者名稱和空字串密碼連接到 127.0.0.1
的資料庫。
PHP 版本
Valet 允許你使用 valet use php@version
指令來切換 PHP 版本。如果指定版本尚未安裝,Valet 將透過Brew 來安裝指定的PHP 版本:
valet use php@7.2valet use php
升級
##你可以在終端機上使用composer global update 指令來更新Valet。升級後,如有需要,最好再次執行 valet install ,以便 Valet 對設定檔進行升級。
升級到 Valet 2.0
Valet 2.0 將 Valet 底層的 Web 伺服器從 Caddy 轉移到 Nginx。在升級到此版本之前,你應該執行以下命令停止並卸載現有的 Caddy 進程:
valet stop valet uninstall
接下來,就根據你採用的安裝方式來升級 Valet (通常是透過 Git 或 Composer )。如果是透過Composer 安裝了Valet ,則應使用以下命令更新到最新的主要版本:
composer global require laravel/valet
如果更新了Valet 的源碼,你應該執行install 命令:
valet install valet restart
升級後,可能需要重新設定或重新連結你的網站。
服務網站
#安裝了 Valet 之後,你就可以開始設定網站。 Valet 提供兩個指令來為 Laravel 的網站提供服務: park
和 link
。
- #執行
mkdir ~/Sites
指令在Mac 上建立一個新的目錄。接下來,執行cd ~/Sites
和valet park
將目前的工作目錄作為 Valet 搜尋站點的路徑。 - 接下來,在這個目錄中建立一個新的 Laravel 網站:
laravel new blog
。 - 在瀏覽器中開啟
http://blog.test
。
就這麼多。 現在,你在 『parked』的目錄中建立的任何 Laravel 專案都會自動使用 http://folder-name.test
這種方式存取。
#如果要在目錄中提供單一網站而不是整個目錄,就使用link 命令。
- 要使用該指令,先在終端機裡切換到你的某個專案並執行
valet link app-name
。 Valet 會在~/.valet/Sites
中建立一個符號連結指向目前的目錄。 - 執行
link
指令後,你可以在瀏覽器透過http://app-name.test
存取網站。
執行 valet links
指令可以查看所有目錄連結的清單。你也可以使用 valet unlink app-name
來刪除符號連結。
{tip} 你可以使用
valet link
將多個(子)網域指向同一個應用程式。要新增子網域或其它網域到應用,可以在應用程式目錄下運行valet link subdomain.app-name
。
預設情況下,Valet 服務網站透過純 HTTP 的方式。但是,如果你想要一個網站使用 HTTP/2 透過加密 TLS 提供服務,使用 secure
指令。例如,如果你的網站透過Valet 在laravel.test
網域上提供服務,你應該執行如下的指令去保護它:
valet secure laravel
要一個網站『解除保護』並恢復為透過純HTTP 提供服務它的流量,使用unsecure
指令。與secure
指令一樣,該指令接受你希望去解除保護的主機名稱:
valet unsecure laravel##共用站點Valet 甚至包括與世界分享你的本地網站的命令。一旦安裝 Valet 後無需安裝其它軟體。 要共用站點,在終端機中導航你的站點目錄並執行
valet share 指令。一個公開可存取的 URL 將插入到剪貼簿中,並可以直接貼到你的瀏覽器中。僅此而已。
Control C 去取消該過程。
自訂 Valet 驅動程式
你可以編寫你自己的 Valet『驅動』來為 Valet 原本不支援的其它框架或 CMS 上運行的 PHP 應用程式提供服務。當你安裝 Valet 時,會建立一個包含 SampleValetDriver.php
檔案的 ~/.config/valet/Drivers
目錄。該文件包含一個範例驅動程式實現,演示如何編寫一個自訂的驅動程式。寫驅動程式只需要你去實作三個方法:serves
,isStaticFile
和 frontControllerPath
。
這三個方法都接受 $sitePath
,$siteName
和 $uri
值作為參數。 $sitePath
是你的機器上提供網站的完全限定路徑。例如 /Users/Lisa/Sites/my-project
。 $siteName
是網域(my-project
)的『主機』/『網站名稱』部分。 $uri
是即將到來的請求 URL(/foo/bar)。
一旦你完成你的自訂 Valet 驅動,使用 FrameworkValetDriver.php
命名約定將它放置在 ~/.config/valet/Drivers
目錄中。例如,如果你為 WordPress 寫了一個自訂的 valet 驅動,你的檔案名稱應該是 WordPressValetDriver.php
。
我們來看看自訂的 Valet 驅動程式應該實現的每種方法的範例實作。
serves
方法
如果你的驅動程式應當處理即將到來的請求時,serves
方法應該回傳true
。否則,此方法應傳回 false
。因此,在此方法中,你應該你企圖確定給定的 $sitePath
是否包含你嘗試提供的類型的項目。
例如,讓我們假裝正在寫一個 WordPressValetDriver
。我們的serves
方法可能看起來如下:
/** * 确定驱动程序是否满足请求。 * * @param string $sitePath * @param string $siteName * @param string $uri * @return bool */ public function serves($sitePath, $siteName, $uri){ return is_dir($sitePath.'/wp-admin'); }
#isStaticFile
方法
isStaticFile
應確定即將到來的請求是否針對一個『靜態』文件,例如:圖片和樣式表。如果檔案是靜態的,此方法應傳回靜態檔案在磁碟上的完全限定路徑。如果即將到來的請求不是針對一個靜態文件,這個方法應該返回false
:
/** * 确定即将到来的请求是否针对静态文件。 * * @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; }
{note} 如果
serves
方法對即將到來的請求且請求URI 不是/
傳回true
時,才會呼叫isStaticFile
方法。
frontControllerPath
方法
#frontControllerPath
方法應該會傳回你的應用程式的『前端控制器』完全限定的路徑,它通常是你的『index.php』檔案或等效的檔案:
/** * 获取对应用程序的前端控制器的完全解析路径。 * * @param string $sitePath * @param string $siteName * @param string $uri * @return string */ public function frontControllerPath($sitePath, $siteName, $uri){ return $sitePath.'/public/index.php'; }
本機驅動
如果你想為單一應用程式自訂 Valet 驅動程序,在應用程式的根目錄下建立一個 LocalValetDriver.php
檔案。你的自訂驅動程式可以擴展ValetDriver
基類或繼承一個現有的應用程式的特定驅動程序,例如:LaravelValetDriver
:
class LocalValetDriver extends LaravelValetDriver{ /** * 确定驱动程序是否满足请求。 * * @param string $sitePath * @param string $siteName * @param string $uri * @return bool */ public function serves($sitePath, $siteName, $uri){ return true; } /** * 获取对应用程序的前端控制器的完全解析路径。 * * @param string $sitePath * @param string $siteName * @param string $uri * @return string */ public function frontControllerPath($sitePath, $siteName, $uri){ return $sitePath.'/public_html/index.php'; } }
其它Valet 指令
##valet forget | 從一個『駐留』目錄執行此指令,從駐留目錄清單將其它移除 |
valet paths | ##查看所有『駐留』路徑|
##重啟Valet 守護程式 | |
#開啟Valet 守護程式 | |
| |
|