代客泊車


frontControllerPath 方法

  • #其它Valet 指令
  • Laravel Valet
    #Valet 還是Homestead
    • 安裝
    • #升級
    • 服務網站
  • #Park 指令
    • Link 指令
    #使用TLS 建立安全站點
分享網站

自訂Valet 驅動程式
######本機驅動########## ########其他Valet 指令############################

簡介

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 phpbrew 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 startvalet 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 的網站提供服務: parklink


park 指令

  • #執行mkdir ~/Sites 指令在Mac 上建立一個新的目錄。接下來,執行 cd ~/Sitesvalet park 將目前的工作目錄作為 Valet 搜尋站點的路徑。
  • 接下來,在這個目錄中建立一個新的 Laravel 網站:laravel new blog
  • 在瀏覽器中開啟 http://blog.test

就這麼多。 現在,你在 『parked』的目錄中建立的任何 Laravel 專案都會自動使用 http://folder-name.test 這種方式存取。


link 指令

#如果要在目錄中提供單一網站而不是整個目錄,就使用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


使用 TLS 保護網站

預設情況下,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 目錄。該文件包含一個範例驅動程式實現,演示如何編寫一個自訂的驅動程式。寫驅動程式只需要你去實作三個方法:servesisStaticFilefrontControllerPath

這三個方法都接受 $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 restartvalet start
##valet forget從一個『駐留』目錄執行此指令,從駐留目錄清單將其它移除
valet paths
##重啟Valet 守護程式
#開啟Valet 守護程式
# #valet stop
停止Valet 守護程式
#########valet uninstall#########完成卸載Valet 守護程式### ############本篇首發在###LearnKu.com### 網站。 ######