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" 命令
"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
域上服务,您应该运行以下命令来保护它:
valet secure laravel
要 "unsecure" 一个站点并恢复到通过普通 HTTP 服务其流量,请使用 unsecure
命令。与 secure
命令一样,此命令接受您希望取消保护的主机名:
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
。我们的服务方法可能如下所示:
/**
* 确定驱动是否服务请求。
*
* @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
:
/**
* 确定传入请求是否为静态文件。
*
* @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" 文件或等效文件:
/**
* 获取应用程序前端控制器的完全解析路径。
*
* @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 守护程序。 |