一、简介
最近 Laravel 发布了一个 Mac 下极简的 Laravel 开发环境 — Valet。你不需要安装 Vagrant、Apache、Nginx,也不需要修改
/ect/hosts
文件。你甚至可以把本地的站点分享到公开的网络进行访问。
当你的电脑开机的时候,Laravel Valet 就会配置你的 Mac 自动在后台运行 PHP 内置的 WEB 服务。然后,通过 DnsMasq,Valet 会把所有的
.dev
域名指向你本地安装的站点。比如说你站点所在的文件夹叫做 blog-test-20160507
,那么你在浏览器访问 blog-test-20160507.dev
的时候就会自动访问到该文件夹。
换句话说,Valet 是一个超级快的 Laravel 开发环境,只需要大约 7M RAM。Valet 并不是提到 Vagrant 或者 Homestead,而是提供了一个灵活的、速度极快的替代品,尤其是当你的电脑内存比较小的时候,它将是一个完美的选择。
默认情况下,Valet 支持以下程序:
此外,你还可以扩展 Valet 使它支持你自己的驱动程序,本文后面会说到。
选择 Homestead 还是 Valet ?
看过文档的话你应该知道,Laravel 还提供了另外一个 Laravel 本地开发环境 — Homestead。Homestead 和 Valet 的区别在于它们的目标受众和本地开发方式。Homestead 提供了一个配置好 Nginx 的 Ubuntu 虚拟机。如果想要一个完全虚拟化的开发环境或者正在使用 Windows / Linux 系统的话,Homestead 是一个功能非常强大的选择。
Valet 只支持 Mac,而且需要你在本地安装 PHP 和 数据库服务,而这些通过 Homebrew 命令
brew install php70
and brew install mariadb
可以很容易的实现。Valet 使用极少的资源消耗提供了一个极速的本地开发环境。所以,它非常适合那些只需要 PHP/MySQL 而不需要一个完整的虚拟化开发环境的人。
Homestead 和 Valet 对于你配置本地开发环境来说都是一个非常好的选择,而具体选择哪个就取决于你的喜好及团队的需求。
二、安装
Valet 需要 Mac 系统以及 Homebrew。在安装之前,你需要确保你本地的 80 端口没有被其他程序(如 Nginx、Apache)所占用。
- 安装或通过
brew update
命令更新 Homebrew 到最新版本 - 通过运行
brew services list
来确保brew services
是可用的。如果不行的话,请添加它 - 通过
brew install php70
来安装 PHP7.0,你可能需要先 tap PHP Homebrew formulas。如果你收到 “No similarly named formulae found.” 这样的提升,可以运行brew install homebrew/php/php70
来安装它 - 通过
composer global require laravel/valet
命令安装 Valet,并确保~/.composer/vendor/bin
目录被添加到了系统的PATH
环境变量中(编辑 ~/.bash_profile 文件,没有的话自己创建一个,在其中添加export PATH=~/.composer/vendor/bin:$PATH
,然后执行source ~/.bash_profile
,然后执行echo $PATH
确保是否添加成功了。)。 - 执行 valet install 命令。这会配置并安装 Valet 和 DnsMasq,并把 Valet 添加到电脑开机时的自动启动程序中。
当 Valet 安装成功后,你可以在终端中 ping 任何
*.dev
域名,如 ping test-blog.dev
,如果安装正确的话,你会看到大致如下的信息:
当电脑启动的时候,Valet 就会自动启动它的后台驻留程序,所以当 Valet 安装成功后你不需要在每次运行
valet up
或者 valet install
来启动它了。
数据库
如果你需要数据库的话,可以在命令行运行
brew install mariadb
来安装 MariaDB,当然你也可以选择 MySQL,然后通过 root
用户名和空密码来连接 127.0.0.1
数据库服务。三、启动你的第一个 Valet 站点
一旦 Valet 安装成功,你就可以启动站点了,Valet 提供了两个命令来帮你启动 Laravel 站点:
park
和 link
。
park
命令
下面以创建新站点来举个例子:
- 使用
mkdir ~/Sites
命令创建一个新的文件夹,然后执行cd ~/Sites
进入刚刚创建的目录,之后运行valet park
命令,这条命令会把当前工作目录作为 Valet 寻找站点的路径。 - 在当前目录创建新的 Laravel 站点:
laravel new blog
。 - 在浏览器打开
blog.dev
试试看是不是已经可以打开网址了?(使用站点文件夹名称+.dev
的格式)
这样就可以了。并且所有位于你执行了
valet park
命令的目录(本例中的 ~/Sites
)下的站点都可以通过这种方式来访问。
link
命令
link
命令也可以用来启动 Laravel 站点。park
命令会把这个目录下所有文件夹都当做独立的不同站点,而当你只需要启动一个站点的时候,可以使用 link
命令。- 进入站点所在目录,然后执行
valet link app-name
(注意此处为 Laravel 的项目名称,而非目录名称)。Valet 会在~/.valet/Sites
创建一个软链接执行当前工作目录。 - 当上面的命令执行之后,你就可以在浏览器访问
http://app-name.dev
了
可以通过
valet links
命令查看 linked 目录,还可以通过 valet unlink app-name
命令取消软链接。四、分享站点
Valet 提供了一个命令可以把你的站点分享给全世界,并且除了 Valet 外你不需要安装其他任何东西。
要分享站点,你需要在终端进入站点目录,然后运行
valet share
命令,之后就会生成一个公共的可访问的URL,并自动的把生成的链接添加到了你的剪切板中,你可以把它粘贴到浏览器中,也可以发送给其让人来访问。
要停止分享,可以按
Control + C
来取消进程。五、查看日志
如果你想查看所有站点的日志,可以运行
valet logs
命令,新的日志也会自动的展示在终端中。六、定制 Valet 驱动
如果你使用 Valet 不支持的其他框架或者 CMS 的话,你也可以编写自己的 Valet “驱动”。当你安装好 Valet 之后,就会自动创建一个
~/.valet/Drivers
文件夹,其中会包含一个SampleValetDriver.php
文件。
这个文件包含了一个实现样例,为你展示了如何编写定制驱动。编写驱动,你只需要实现三个方法:
serves
、isStaticFile
和 frontControllerPath
。
这三个方法都接收
$sitePath
、$siteName
和 $uri
作为其参数。$sitePath
是你站点目录的完全路径,如 /Users/Specs/Sites/my-project
。$siteName
是“主机/网站名称”部分(my-project
)。$uri 是传入的请求 URI(/foo/bar
)。
当完成之后,你可以以
FrameworkValetDriver.php
命名方式把其放在 ~/.valet/Drivers
文件夹中。例如你编写 WordPress 驱动的话,应该将其命名为 WordPressValetDriver.php
。
下面让我们来看看你定制 Valet 驱动时应该实现的样例。
serves
方法
如果你的 Valet 需要处理传入请求的话,
serves
方法应该返回 TRUE
,否则应该返回FALSE
。所以在此方法中,你应该确定传入的 $sitePath
是否包含你需要服务的类型。
例如,假设我们在编写
WordPressValetDriver
,那么该方法应该是下面这样:
- public function serves($sitePath, $siteName, $uri)
- {
- return is_dir($sitePath.'/wp-admin');
- }
isStaticFile
方法
isStaticFile
应该判断接收的请求是否是静态文件,如图片、样式表等,该方法要返回文件所在硬盘中的全部路径。如果接收的请求不是静态文件,则返回 FALSE
:
- public function isStaticFile($sitePath, $siteName, $uri)
- {
- if (file_exists($staticFilePath = $sitePath.'/public/'.$uri)) {
- return $staticFilePath;
- }
- return false;
- }
注意:
isStaticFile
方法只有在 serves
方法返回 TRUE
,并且进入的请求不是 /
的时候才会调用。
frontControllerPath
方法
frontControllerPath
方法应当返回你的“前端控制器”的全部路径,一般应该是 index.php
或者类似的文件:
- public function frontControllerPath($sitePath, $siteName, $uri)
- {
- return $sitePath.'/public/index.php';
- }
七、其他 Valet 命令
命令 | 描述 |
---|---|
valet forget | 在 “parked” 的目录中执行该命令来把其从 parded 目录列表中删除。 |
valet paths | 查看所有 “parked” 路径 |
valet restart | 重启 Valet 程序 |
valet start | 启动 Valet 程序 |
valet stop | 停止 Valet 程序 |
valet uninstall | 卸载 Valet 程序 |
from : http://9iphp.com/web/laravel/laravel-valet-local-dev-environment.html
沒有留言:
張貼留言