* * * * *
[TOC]
## 簡介
Valet 是為 Mac 提供的極簡主義開發環境,沒有 Vagrant ,也無需?`/etc/hosts`?文件,甚至可以使用本地隧道公開共享你的站點。*Yeah, we like it too.*
Laravel Valet 會在你的 Mac 上將?[Nginx](https://www.nginx.com/)?設置為隨系統啟動后臺運行,然后使用?[DnsMasq](https://en.wikipedia.org/wiki/Dnsmasq)?, Valet 將所有的請求代理到?`*.dev`?域名并指向本地安裝的站點目錄。
換句話說,一個速度極快的 Laravel 開發環境僅僅需要占用 7MB 內存。 Valet 并不是想要替代 Vagrant 或者 Homestead,只是提供另外一種選擇,更加靈活、方便、以及占用更小的內存。
開箱即用, Valet 為我們提供以下軟件和工具支持,然而不僅限于此:
* [Laravel](https://laravel.com/)
* [Lumen](https://lumen.laravel.com/)
* [Bedrock](https://roots.io/bedrock/)
* [CakePHP 3](https://cakephp.org/)
* [Concrete5](http://www.concrete5.org/)
* [Contao](https://contao.org/en/)
* [Craft](https://craftcms.com/)
* [Drupal](https://www.drupal.org/)
* [Jigsaw](http://jigsaw.tighten.co/)
* [Joomla](https://www.joomla.org/)
* [Katana](https://github.com/themsaid/katana)
* [Kirby](https://getkirby.com/)
* [Magento](https://magento.com/)
* [OctoberCMS](https://octobercms.com/)
* [Sculpin](https://sculpin.io/)
* [Slim](https://www.slimframework.com/)
* [Statamic](https://statamic.com/)
* Static HTML
* [Symfony](https://symfony.com/)
* [WordPress](https://wordpress.org/)
* [Zend](https://framework.zend.com/)
當然,你還可以通過?[自定義驅動](https://laravel-china.org/docs/laravel/5.4/valet/1221#custom-valet-drivers)?來擴展 Valet.
### 選擇 Valet 還是 Homestead
正如你所知道的, Laravel 提供另外一個開發環境?[Homestead](https://laravel-china.org/docs/laravel/5.4/homestead)?, Homestead 和 Valet 不同之處在于兩者的目標受眾和本地開發方式。 Homestead 提供一個完整的包含自動化配置 Nginx 的 Ubuntu 虛擬機。如果你需要一個完整的虛擬化 Linux 開發環境或者是使用 Windows / Linux 操作系統,那么 Homestead 無疑是最佳選擇。
Valet 只支持 Mac ,并且要求本地安裝 PHP 和數據庫服務器,這可以通過使用?[Homebrew](http://brew.sh/)?命令?`brew install php71`和?`brew install mysql`?輕松實現。 Valet 通過最小的資源消耗提供一個本地極速開發環境,如果你只需要 PHP / MySQL 而不是完整的虛擬化開發環境,那么 Valet 將是最好的選擇。
Valet 和 Homestead 都是配置你本地 Laravel 開發環境的好幫手。選擇使用哪一個取決于你的個人喜好和團隊需求。
## 安裝
**Valet 要求 macOS 和?[Homebrew](http://brew.sh/)?安裝之前,你需要確保沒有其他程序如 Apache 或者 Nginx 占用你本地機器的 80 端口。 安裝步驟如下:**
* 安裝或更新?[Homebrew](http://brew.sh/)?到最新版本,使用命令?`brew update`
* 使用命令?`brew install homebrew/php/php71`?安裝 PHP 7.1 。
* 通過?`composer global require laravel/valet`?命令安裝 Valet 。請確定?`~/.composer/vendor/bin`?存在于你的系統環境變量 「PATH」 中。
* 運行?`valet install`?命令。它將會配置并安裝 Valet 和 DnsMasq ,并且將 Valet 的進程注冊為隨系統啟動
一旦你完成 Valet 安裝,嘗試使用像?`ping foobar.dev`?這樣的命令在終端 ping 任意的?`*.dev`?域名。如果 Valet 正常安裝你會看到來自?`127.0.0.1`?的響應
Valet 將會在每次系統啟動時自動啟動,而不需要你每次運行?`valet start`?或?`valet install`。
#### 使用其他的頂級域名
默認情況下, Valet 使用?`.dev`?頂級域名。如果你喜歡其他域名,可以使用?`valet domain tld-name`?命令。
例如,如果你想要使用?`.app`?來代替?`.dev`?,運行?`valet domain app`?然后 Valet 會自動使用?`*.app`?來為你的項目命名。
#### 數據庫
如果你需要一個數據庫,可以使用?`brew install mysql`?命令試一試 MySQL 。如果你的 Mac 是第一次安裝 MySQL 數據庫,你可能需要執行?`brew services start mysql`?命令來啟動它。之后,你可以使用 host 為?`127.0.0.1`?,用戶名?`root`?,密碼為空進行數據庫連接。
### 升級
你可以使用?`composer global update`?命令升級你的 Valet 程序,升級之后,最好使用?`valet install`?命令更新 Valet 的配置文件。
#### 升級到 Valet 2.0
Valet 2.0 將 Valet 的底層 Web 服務從 Caddy 切換到了 Nginx 。在你升級到這個版本之前你應該運行下面的命令來停止并卸載已經啟動的 Caddy 進程:
~~~
valet stop
~~~
valet uninstall
接下來,你應該升級到 Valet 的最新版本。取決于你安裝 Valet 的方式,這通常通過 Git 或 Composer 來實現。如果你是通過 Composer 安裝的 Valet 你應該使用下面的命令來更新到最新的主版本:
~~~
composer global require laravel/valet
~~~
當新的 Valet 源代碼下載好了之后,你應該運行?`install`?命令:
~~~
valet install
~~~
valet restart
在升級之后,它需要 re-park 或 re-link 你的站點。
## 服務站點
當 Valet 安裝完成,你就可以啟動服務站點。 Valet 為此提供了兩個命令:`park`?和?`link`
**`park`?命令**
* 在你的 Mac 中創建一個新的目錄,例如?`mkdir ~/Sites`?。然后?`cd ~/Sites`?并且運行?`valet park`?。這個命令將在當前所在目錄作為 Web 根目錄, Valet 將會在這個目錄中搜索站點。
* 接下來,在這個目錄中創建一個新的 Laravel 站點:?`laravel new blog`?。
* 在瀏覽器中訪問?`http://blog.dev`?。
**這就是我們所要做的全部工作**。現在,你所「parked」目錄中的所有 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`?來刪除符號鏈接。
> {tip} 你可以通過使用?`valet link`?將多個(子)域名指向同一個應用,要添加子域名或其它域名到應用,可以在應用目錄下運行?`valet link subdomain.app-name`?。
**配置 TLS 讓站點更安全**
默認的情況下, Valet 通過純 HTTP 協議服務網站。然而,如果你想利用 HTTP/2 提供加密的 TLS ,你可以使用?`secure`?命令。例如,你有一個站點?`laravel.dev`?,可以使用以下命令讓其更安全:
~~~
valet secure laravel
~~~
想恢復一個站點到普通的 HTTP 使用?`unsecure 命令`,這個命令可以去除 secure 增加的安全加密:
~~~
valet unsecure laravel
~~~
## 分享站點
Valet 還提供一個命令將本地站點分享給其他人,這不需要任何額外安裝軟件即可實現。
要分享站點,在你的終端中切換到站點目錄使用?`valet share`?命令。這會生成一個可以公開訪問的 URL 并插入你的剪切板,以便你直接粘貼到瀏覽器,就是這么簡單。
要停止分享站點,使用?`Control + C`?快捷組合鍵即可。
> {note}?`valet share`?目前尚不支持分享使用?`valet secure`?命令進行安全處理的站點。
## 自定義 Valet 驅動
你可以編寫自定義的 Valet 「驅動」運行非原生支持的其他 PHP 框架或 CMS 。安裝完 Valet 時會創建一個?`~/.valet/Drivers`?目錄,該目錄中有一個?`SampleValetDriver.php`?文件。這個文件中簡單演示如何編寫自定義驅動。 編寫驅動只需要實現三個方法:?`serves`?,`isStaticFile`?和?`frontControllerPath`?。
這三個方法都接收?`$sitePath`?,`$siteName`?和?`$uri`?作為參數。?`$sitePath`?表示站點的絕對路徑,例如?`/Users/Lisa/Sites/my-project`?。?`$siteName`?表示站點的 「host」/ 「站點名稱」 部分,如 (`my-project`) 。?`$uri`?則是輸入的請求 URI,如 (`/foo/bar`) 。
編寫好你的自定義 Valet 驅動,將其放到?`~/.valet/Drivers`?目錄并遵循?`FrameworkValetDriver.php`?這種命名規范。例如,如果編寫一個自定義的 WordPress 驅動,對應的文件名稱應是?`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}?`isStaticFile`?方法只有在?`serves`?方法返回?`true`?并且請求 URI 不是?`/`?才會被調用。
#### `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`?或使用這些應用特定的方法來編寫 Valet 驅動,例如下面的?`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 restart` | 重啟 |
| `valet start` | 啟動 |
| `valet stop` | 停止 |
| `valet uninstall` | 卸載 |
- 前言
- 翻譯說明
- 發行說明
- 升級說明
- 貢獻導引
- 入門指南
- 安裝
- 配置信息
- 文件夾結構
- 請求周期
- 開發環境部署
- Homestead
- Valet
- 核心概念
- 服務容器
- 服務提供者
- Facades
- Contracts
- HTTP層
- 路由
- 中間件
- CSRF 保護
- 控制器
- 請求
- 響應
- 視圖
- Session
- 表單驗證
- 前端
- Blade 模板
- 本地化
- 前端指南
- 編輯資源 Mix
- 安全
- 用戶認證
- Passport OAuth 認證
- 用戶授權
- 加密解密
- 哈希
- 重置密碼
- 綜合話題
- Artisan 命令行
- 廣播系統
- 緩存系統
- 集合
- 錯誤與日志
- 事件系統
- 文件存儲
- 輔助函數
- 郵件發送
- 消息通知
- 擴展包開發
- 隊列
- 任務調度
- 數據庫
- 快速入門
- 查詢構造器
- 分頁
- 數據庫遷移
- 數據填充
- Redis
- Eloquent ORM
- 快速入門
- 模型關聯
- Eloquent 集合
- 修改器
- 序列化
- 測試
- 快速入門
- HTTP 測試
- 瀏覽器測試 Dusk
- 數據庫測試
- 測試模擬器
- 官方擴展包
- Cashier 交易工具包
- Envoy 部署工具
- Scout 全文搜索
- Socialite 社會化登錄