介绍
Valet 是 Mac 下一个极简的 Laravel 开发环境。不需要 Vagrant,也不需要 Apache、 Nginx 以及 /etc/hosts
文件。你甚至可以使用本地 tunnels 公开共享你的站点。
当机器启动时,Laravel Valet 会配置你的 Mac 一直在后台运行 Caddy。之后,通过 DnsMasq,Valet 代理所有 *.dev
域名的请求指向安装在你本地机器上的站点。
换句话说,一个超级快速的 Laravel 开发环境仅需 7M RAM。Valet 并不是一个 Vagrant 或 Homestead 的完全替代,只是提供了另外一种选择,更加灵活、极速、以及占用更小的内存空间。
默认情况下,Valet 支持单不仅限于:
当然,你还可以定义自己的驱动。
Valet 还是 Homestead
正如你所知道的,Laravel 还提供了另外一个开发环境 Homestead。Homestead 和 Valet 的不同之处在于两者的目标受众和本地开发方式。Homestead 提供了一个自动配置好 Nginx 的 Ubuntu 虚拟机。如果你需要一个完整的虚拟化 Linux 开发环境或者使用的是 Windows/Linux 操作系统,那么 Homestead 无疑是最佳选择。
Valet 仅支持 Mac,并需要直接在你本地安装 PHP 和数据库服务。这可以通过 brew install php70
和 brew install mariadb
这两个 Homebrew 命令轻松实现。Valet 使用最小化的资源消耗提供了一个非常快速的本地开发环境,这对于仅要求 PHP / MySQL 而不需要一个完整的虚拟化环境的人来说是一个非常棒的选择。
Valet 和 Homestead 都是配置本地 Laravel 开发环境的好选择,选择使用哪个要根据你的喜好和你团队的需要。
安装
Valet 要求 Mac 和 Homebrew,在安装前请确保没有其他程序如 Apache 或 Nginx 绑定到你本地的 80
端口。
- 使用
brew update
更新 Homebrew 到最新版本 - 使用 Homebrew 的
brew install homebrew/php/php70
命令安装 PHP 7.0 - 通过 Composer 的
composer global require laravel/valet
安装 Valet - 运行
valet install
命令,这将配置并安装 Valet 及 DnsMasq,然后注册 Valet 后台常驻并随机启动。
安装 Valet 后,试着在命令行通过类似 ping foobar.dev
的命令来 ping
任意的 *.dev
域名。如果 Valet 安装正常,你应该看到域名响应 127.0.0.1
。
当你的电脑启动时,Valet 将自动开启它的后台驻留程序。当 Valet 首次安装成功后,你不需要再运行 valet start
或 valet install
。
使用其他域名
默认情况你可以通过 *.dev
访问项目。如果你想使用另一个域名,你可以通过 valet domain tld-name
命令来实现。
例如,你想用 .app
来代替 .dev
,运行 valet domain app
命令,Valet 将自动通过 *.app
访问你的项目。
数据库
如果你需要使用数据库,试试在命令行运行 brew install mariadb
命令来安装 MariaDB。你可以通过 root 用户名和空密码来访问 127.0.0.1
数据库。
发行说明
1.1.5 版本
1.1.5 版本的 Valet 带来了多种内在的提升。
升级方式
当使用 composer global update
更新你的 Valet 后,你需要在命令行运行 valet install
命令。
1.1.0 版本
1.1.0 版本带来了多个重大提升。内置的 PHP 服务被 Caddy 取代来处理进来的请求。引入 Caddy 允许将来多种提升,并且不需要禁用内置的 PHP 服务就可以让 Valet 站点发出 HTTP 请求其他 Valet 站点。
升级方式
当通过 composer global update
升级 Valet 后,你需要在命令行运行 valet install
命令在系统中创建一个新的 Caddy 后台驻留程序文件。
服务站点
Valet安装完成后,就可以启动服务站点,Valet 为此提供了两个命令 park
和 link
来帮你服务 Laravel 站点。
park
命令
- 通过运行
mkdir ~/Sites
类似的命令在 Mac 上创建一个新的文件夹,之后cd ~/Sites
并运行valet park
。这个命令将注册当前工作目录作为 Valet 搜索站点的路径。 - 在这个目录运行
laravel new blog
创建一个新的 Laravel 站点。 - 在浏览器访问
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
命令。如果你的站点正在被 laravel.dev 域名服务,你需要运行下面的命令:
valet secure laravel
要去除使用安全连接,并恢复使用普通的 HTTP 服务站点,使用 unsecure
命令。同 secure
一样,这个命令接受一个你想去除安全连接的主机名:
valet unsecure laravel
分享站点
Valet还提供了一个命令用于将本地站点共享给其他人,Valet 安装后,不再需要任何额外工具即可实现。
要分享站点,在命令行进入站点目录,并运行 valet share
命令。一个公开可访问的 URL 将添加到你的剪切板,并准备好直接粘贴到浏览器,就这么简单。
要停止共享站点,使用 Control + C
即可。
查看日志
如果你想要在终端显示站点的所有日志,可以运行 valet logs
命令。当新的日志添加进来后将被展示到命令行。你不需要离开命令行就可以查看所有的日志变化。
自定义 Valet 驱动
你可以编写自己的 Valet 驱动来使 PHP 应用运行 Valet 不支持的其他框架或 CMS。当安装 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 自定义驱动,使用 FrameworkValetDriver.php
命名把它放到 ~/.valet/Drivers
目录。例如,你想为 WordPress 写一个自定义驱动,文件名应该是 WordPressValetDriver.php
。
下面我们来具体讨论并演示自定义 Valet 驱动需要实现的三个方法。
serves
方法
如果你的自定义驱动要处理进入的请求,serves
方法需要返回 true
。否则这个方法要返回 false
。所以,在这个方法中你需要检查 $sitePath
是否包含你要服务的项目的类型。
例如我们要编写一个 WordPressValetDriver
,我们的 serve
看起来应该是这样:
/** * Determine if the driver serves the request. * * @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
:
/** * Determine if the incoming request is for a static file. * * @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; }
注:isStaticFile
方法只有在 serves
方法返回 true
并且请求 URI 不是 /
的时候才会被调用。
frontControllerPath
方法
frontControllerPath
方法会返回前端控制器的完整路径,通常是index.php
或类似的:
/** * Get the fully resolved path to the application's front controller. * * @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” 目录中运行这个命令来把它从 parked 目录中删除。 |
valet paths | 查看所有 “parked” 路径。 |
valet restart | 重启 Valet 后台常驻程序。 |
valet start | 启动 Valet 后台常驻程序。 |
valet stop | 停止 Valet 后台常驻程序。 |
valet uninstall | 完全删除 Valet 后台常驻程序。 |
该篇属于专题:《Laravel 5.3 中文文档》