首页 » Laravel 5.3 中文文档 » 正文

「Laravel 5.3 中文文档」开发环境 – Valet

介绍

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 文件。这个文件包含一个简单的驱动实现来展示如果编写自定义驱动。编写驱动仅需要你实现三个方法:servesisStaticFile 和 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 中文文档

发表评论