Windows 下面我们使用 homestead 来搭建 Laravel 开发环境,在 Mac 下面依然也可以。这里介绍的是另外一种方式。
Valet 是 Mac 极简主义者的 Laravel 开发环境。没有 Vagrant,不需要 /etc/hosts 文件。甚至可以使用本地隧道公开分享你的站点。
Laravel Valet 为您的 Mac 设置了开机后始终在后台运行 Nginx 服务。然后,Valet 使用 DnsMasq 将所有指向安装在本地的计算机站点请求代理到 *.test 结尾的域名上。
换句话说,一个速度极快的 Laravel 开发环境只占用 7M 内存。Valet 并不是想要完全替换 Vagrant 或 Homestead,只是提供另外一种使用起来更加灵活、方便、以及内存占用更小的选择。
当然, 您也可以使用自定义驱动来扩展您的 Valet。
Valet 需要 MacOS 和 Homebrew。在安装之前,要确保没有其它程序(如 Apache 或 Nignx)占用了本地机器的 80 端口
使用 brew update 将 Homebrew 安装或更新到最新版本。
通过 Homebrew 使用 brew install homebrew/php/php72 命令安装 PHP 7.2。
通过 Composer 使用 composer global require laravel/valet 命令安装 Valet。确保 ~/.composer/vendor/bin 目录位于系统的 PATH 中。
echo "~/.composer/vendor/bin" >> ~/.bash_profile
source ~/.bash_profile运行 valet install 命令来配置和安装 Valet 和 DnsMasq,并注册 Valet 后台随机启动。
安装完 Valet,使用 ping foobar.test 命令在终端上 ping 任何一个 *.test 的域名。如果 Valet 安装正确,可以在终端上看到来自 127.0.0.1 的响应。
每次启动机器时,Valet 会自动启动其进程。所以只要完成了 Valet 的初始化,就无需再次运行 valet start 或 valet install。
默认情况下,Valet 使用 .test 顶级域名为你的项目提供服务。如果你想使用其它域名,可以使用 valet domain tld-name 命令。
例如,如果你要使用 .app 而不是 .test,就运行 valet domain app,Valet 会自动将站点域名改为 *.app 。
如果你要使用数据库,就在终端运行 brew install mysql 安装 MySQL。安装完成后,你可以使用 root 作为用户名和空字符串作为密码连接到 127.0.0.1 的数据库。当然,默认安装的是最新版本的,如果要指定版本,可以在后面接版本号,如安装 5.7 版本 MySQL 数据库: brew install mysql@5.7。
你可以在终端使用 composer global update 命令来更新 Valet 。升级后,如有需要,最好再运行一次 valet install,以便 Valet 可以对配置文件进行升级。
安装了 Valet 之后,你就可以开始设置站点。Valet 提供两个命令来为 Laravel 的站点提供服务: park 和 link。
运行 mkdir ~/Sites 命令在 Mac 上创建一个新的目录。接下来,运行 cd ~/Sites 和 valet park 将当前的工作目录作为 Valet 搜索站点的路径。
安装 Laravel installer: composer global require "laravel/installer"。
接下来,在这个目录中创建一个新的 Laravel 站点: laravel new blog。
在浏览器中打开 http://blog.test。
就这么多。现在,你在「parked」的目录中创建的任何 Laravel 项目都将自动使用 http://folder-name.test 这种方式访问。
如果要在目录中提供单个站点而不是整个目录,就使用 link 命令。
要使用该命令,先在终端里切换到你的某个项目并运行 valet link app-name。Valet 会在 ~/.valet/Sites 中创建一个符号链接指向当前的目录。
运行 link 命令后,你可以在浏览器通过 http://app-name.test 访问站点。
运行 valet links 命令可以查看所有目录链接的列表。你还可以使用 valet unlink app-name 来删除符号链接。
你可以使用 valet link 将多个(子)域名指向同一个应用。要添加子域名或其它域名到应用,可以在应用目录下运行
valet link subdomain.app-name。
默认情况下,Valet 使用 HTTP 协议提供站点。但是,如果你想使用 HTTP/2 提供加密的 TLS 站点,使用 secure 命令。例如,如果你的站点域名是 laravel.test,可以这样:
valet secure laravel要还原为 HTTP ,使用 unsecure 命令。像 secure 命令一样,此命令接受你要取消安全加密的站点名称:
valet unsecure laravelValet 甚至包括与全世界分享你的本地网站的命令。一旦安装了 Valet ,就不需要额外的软件安装。
要共享站点,先在终端切换到站点目录,然后运行 valet share 命令。将可公开访问的网址插入剪贴板,然后直接粘贴到浏览器中访问。就这么简单~
要停止分享你的网站按 Control + C 取消分享。
valet share 目前不支持使用
valet secure命令保护共享的站点。
你可以编写自己的 Valet 「驱动」来提供运行在另一个不是由 Valet 支持的框架或 CMS 上的 PHP 应用程序。安装 Valet 时,会创建一个包含 SampleValetDriver.php 文件 ~/.valet/Drivers 目录。这个文件包含实现驱动程序的例子,演示了如何编写自定义驱动程序。编写驱动程序只需要实现三种方法: serves、isStaticFile 和 frontControllerPath。
这三种方法都会收到 $sitePath、$siteName 和 $uri 值作为参数。$sitePath 是计算机上提供的站点的完整路径,例如 /Users/Lisa/Sites/my-project。$siteName 是 「主机」/「站点名」 的域名部分,如 my-project。$uri 则是输入的请求地址,如 /foo/bar。
完成自定义 Valet 驱动后,使用 FrameworkValetDriver.php 这样的命名将其放在 ~/.valet/Drivers 目录中。例如,如果你正在为 WordPress 编写自定义 Valet 驱动程序,那你的文件名应该是 WordPressValetDriver.php。
接下来看看自定义 Valet 驱动应该实现的每种方法的实现示例。
如果你的驱动程序应该处理传入的请求,那么 serves 方法应该返回 true。否则,该方法应返回 false。因此,在此方法中,你需要确定给定的 $sitePath 是否包含你要提供的类型的项目。
例如,假设我们正在编写一个 WordPressValetDriver。serve 方法可能如下所示:
/**
* 确定驱动程序是否提供请求。
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return bool
*/
public function serves($sitePath, $siteName, $uri)
{
return is_dir($sitePath.'/wp-admin');
}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 方法会返回完整的路径到你应用的「前端控制器」,这通常是你的「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';
}
}命令 | 注释 |
|---|---|
| 在被「parked」的目录中运行这个命令,能够将这个目录从「parked」目录列表中删除。 |
| 查看所有「parked」过的路径。 |
| 重启 Valet。 |
| 启动 Valet。 |
| 停止 Valet。 |
| 卸载 Valet。 |