Skip to content
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待
虚位以待

Laravel Valet ​

介绍 ​

Valet 是为 Mac 极简主义者设计的 Laravel 开发环境。没有 Vagrant,没有 Apache,没有 Nginx,没有 /etc/hosts 文件。您甚至可以使用本地隧道公开共享您的站点。是的,我们也喜欢它。

Laravel Valet 配置您的 Mac 以便在您的机器启动时始终在后台运行 Caddy。然后,使用 DnsMasq,Valet 将所有 *.dev 域的请求代理到安装在您本地机器上的站点。

换句话说,这是一个使用大约 7 MB RAM 的超快 Laravel 开发环境。Valet 不是 Vagrant 或 Homestead 的完整替代品,但如果您想要灵活的基础功能,偏爱极快的速度,或者在 RAM 有限的机器上工作,它是一个很好的选择。

开箱即用,Valet 支持包括但不限于:

然而,您可以通过自己的自定义驱动扩展 Valet。

Valet 或 Homestead ​

如您所知,Laravel 提供了 Homestead,另一个本地 Laravel 开发环境。Homestead 和 Valet 在其目标受众和本地开发方法上有所不同。Homestead 提供了一个完整的 Ubuntu 虚拟机,带有自动化的 Nginx 配置。如果您想要一个完全虚拟化的 Linux 开发环境或在 Windows / Linux 上工作,Homestead 是一个很好的选择。

Valet 仅支持 Mac,并要求您将 PHP 和数据库服务器直接安装到本地机器上。这可以通过使用 Homebrew 轻松实现,使用诸如 brew install php70 和 brew install mariadb 之类的命令。Valet 提供了一个超快的本地开发环境,资源消耗极少,因此对于只需要 PHP / MySQL 而不需要完全虚拟化开发环境的开发人员来说,它是一个很好的选择。

Valet 和 Homestead 都是配置您的 Laravel 开发环境的绝佳选择。您选择哪一个将取决于您的个人品味和团队的需求。

安装 ​

Valet 需要 Mac 操作系统和 Homebrew。在安装之前,您应该确保没有其他程序(如 Apache 或 Nginx)绑定到本地机器的端口 80。

  • 使用 brew update 安装或更新 Homebrew 到最新版本。
  • 使用 Homebrew 安装 PHP 7.0,命令为 brew install homebrew/php/php70。
  • 使用 Composer 安装 Valet,命令为 composer global require laravel/valet。确保 ~/.composer/vendor/bin 目录在您的系统 "PATH" 中。
  • 运行 valet install 命令。这将配置并安装 Valet 和 DnsMasq,并注册 Valet 的守护程序以在系统启动时启动。

Valet 安装完成后,尝试在终端中使用 ping foobar.dev 命令 ping 任意 *.dev 域。如果 Valet 安装正确,您应该会看到此域在 127.0.0.1 上响应。

Valet 将在每次机器启动时自动启动其守护程序。初始 Valet 安装完成后,无需再次运行 valet start 或 valet install。

使用其他域 ​

默认情况下,Valet 使用 .dev TLD 服务您的项目。如果您想使用其他域,可以使用 valet domain tld-name 命令。

例如,如果您想使用 .app 而不是 .dev,请运行 valet domain app,Valet 将自动开始在 *.app 上服务您的项目。

数据库 ​

如果您需要数据库,请尝试通过在命令行中运行 brew install mariadb 来安装 MariaDB。您可以使用 root 用户名和空字符串作为密码连接到 127.0.0.1 上的数据库。

发行说明 ​

版本 1.1.5 ​

Valet 1.1.5 版本带来了各种内部改进。

升级说明 ​

在使用 composer global update 更新 Valet 安装后,您应该在终端中运行 valet install 命令。

版本 1.1.0 ​

Valet 1.1.0 版本带来了各种重大改进。内置的 PHP 服务器已被 Caddy 替代,用于处理传入的 HTTP 请求。引入 Caddy 允许进行各种未来改进,并允许 Valet 站点在不阻塞内置 PHP 服务器的情况下向其他 Valet 站点发出 HTTP 请求。

升级说明 ​

在使用 composer global update 更新 Valet 安装后,您应该在终端中运行 valet install 命令,以在系统上创建新的 Caddy 守护文件。

服务站点 ​

Valet 安装完成后,您就可以开始服务站点了。Valet 提供了两个命令来帮助您服务您的 Laravel 站点:park 和 link。

"Park" 命令 ​

  • 通过运行类似 mkdir ~/Sites 的命令在您的 Mac 上创建一个新目录。接下来,cd ~/Sites 并运行 valet park。此命令将注册您的当前工作目录为 Valet 应该搜索站点的路径。
  • 接下来,在此目录中创建一个新的 Laravel 站点:laravel new blog。
  • 在浏览器中打开 http://blog.dev。

就是这么简单。 现在,您在 "parked" 目录中创建的任何 Laravel 项目都将自动使用 http://folder-name.dev 约定进行服务。

"Link" 命令也可以用来服务您的 Laravel 站点。如果您只想在一个目录中服务一个站点而不是整个目录,此命令非常有用。

  • 要使用此命令,请导航到您的一个项目并在终端中运行 valet link app-name。Valet 将在 ~/.valet/Sites 中创建一个指向您当前工作目录的符号链接。
  • 运行 link 命令后,您可以在浏览器中通过 http://app-name.dev 访问该站点。

要查看所有链接目录的列表,请运行 valet links 命令。您可以使用 valet unlink app-name 来销毁符号链接。

使用 TLS 保护站点 ​

默认情况下,Valet 通过普通 HTTP 服务站点。但是,如果您希望通过加密的 TLS 使用 HTTP/2 服务站点,请使用 secure 命令。例如,如果您的站点由 Valet 在 laravel.dev 域上服务,您应该运行以下命令来保护它:

php
valet secure laravel

要 "unsecure" 一个站点并恢复到通过普通 HTTP 服务其流量,请使用 unsecure 命令。与 secure 命令一样,此命令接受您希望取消保护的主机名:

php
valet unsecure laravel

共享站点 ​

Valet 甚至包括一个命令来与世界共享您的本地站点。Valet 安装完成后,无需额外的软件安装。

要共享站点,请在终端中导航到站点的目录并运行 valet share 命令。一个可公开访问的 URL 将被插入到您的剪贴板中,并准备好直接粘贴到您的浏览器中。就是这样。

要停止共享您的站点,请按 Control + C 取消该过程。

查看日志 ​

如果您希望将所有站点的日志流式传输到您的终端,请运行 valet logs 命令。新的日志条目将在发生时显示在您的终端中。这是一个无需离开终端即可掌握所有日志文件的好方法。

自定义 Valet 驱动 ​

您可以编写自己的 Valet "驱动" 来服务在 Valet 不原生支持的其他框架或 CMS 上运行的 PHP 应用程序。当您安装 Valet 时,会创建一个 ~/.valet/Drivers 目录,其中包含一个 SampleValetDriver.php 文件。此文件包含一个示例驱动实现,以演示如何编写自定义驱动。编写驱动只需实现三个方法:serves、isStaticFile 和 frontControllerPath。

所有三个方法都接收 $sitePath、$siteName 和 $uri 值作为其参数。$sitePath 是在您的机器上服务的站点的完全限定路径,例如 /Users/Lisa/Sites/my-project。$siteName 是域的 "主机" / "站点名称" 部分(my-project)。$uri 是传入请求的 URI(/foo/bar)。

完成自定义 Valet 驱动后,将其放置在 ~/.valet/Drivers 目录中,使用 FrameworkValetDriver.php 命名约定。例如,如果您正在为 WordPress 编写自定义 Valet 驱动,您的文件名应为 WordPressValetDriver.php。

让我们看看您的自定义 Valet 驱动应实现的每个方法的示例实现。

serves 方法 ​

serves 方法应返回 true,如果您的驱动应处理传入请求。否则,该方法应返回 false。因此,在此方法中,您应尝试确定给定的 $sitePath 是否包含您尝试服务的项目类型。

例如,假设我们正在编写一个 WordPressValetDriver。我们的服务方法可能如下所示:

php
/**
 * 确定驱动是否服务请求。
 *
 * @param  string  $sitePath
 * @param  string  $siteName
 * @param  string  $uri
 * @return void
 */
public function serves($sitePath, $siteName, $uri)
{
    return is_dir($sitePath.'/wp-admin');
}

isStaticFile 方法 ​

isStaticFile 应确定传入请求是否为 "静态" 文件,例如图像或样式表。如果文件是静态的,该方法应返回磁盘上静态文件的完全限定路径。如果传入请求不是静态文件,该方法应返回 false:

php
/**
 * 确定传入请求是否为静态文件。
 *
 * @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;
}

注意

只有当 serves 方法对传入请求返回 true 且请求 URI 不是 / 时,才会调用 isStaticFile 方法。

frontControllerPath 方法 ​

frontControllerPath 方法应返回应用程序 "前端控制器" 的完全解析路径,通常是您的 "index.php" 文件或等效文件:

php
/**
 * 获取应用程序前端控制器的完全解析路径。
 *
 * @param  string  $sitePath
 * @param  string  $siteName
 * @param  string  $uri
 * @return string
 */
public function frontControllerPath($sitePath, $siteName, $uri)
{
    return $sitePath.'/public/index.php';
}

其他 Valet 命令 ​

命令描述
valet forget从 "parked" 目录运行此命令以将其从已停放目录列表中移除。
valet paths查看所有 "parked" 路径。
valet restart重启 Valet 守护程序。
valet start启动 Valet 守护程序。
valet stop停止 Valet 守护程序。
valet uninstall完全卸载 Valet 守护程序。