<article><h1>Laravel 的开发环境 Valet</h1><ul><li><a href="#introduction">简介</a><ul><li><a href="#valet-or-homestead">选择 Valet 还是 Homestead</a></li></ul></li><li><a href="#installation">安装</a><ul><li><a href="#upgrading">升级</a></li></ul></li><li><a href="#serving-sites">服务站点</a><ul><li><a href="#the-park-command">「Park」命令</a></li><li><a href="#the-link-command">「Link」命令</a></li><li><a href="#securing-sites">通过TLS让站点更安全</a></li></ul></li><li><a href="#sharing-sites">分享站点</a></li><li><a href="#custom-valet-drivers">自定义 Valet 驱动</a></li><li><a href="#other-valet-commands">其他 Valet 命令</a></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">简介</a></h2><p>Valet 是为 Mac 提供的极简主义开发环境,没有 Vagrant ,也无需 <code class=" language-php"><span class="token operator">/</span>etc<span class="token operator">/</span>hosts</code> 文件,甚至可以使用本地隧道公开共享你的站点。<em>Yeah, we like it too.</em></p><p>Laravel Valet 会在你的 Mac 上将 <a href="https://www.nginx.com/">Nginx</a> 设置为随系统启动后台运行,然后使用 <a href="https://en.wikipedia.org/wiki/Dnsmasq">DnsMasq</a> , Valet 将所有的请求代理到 <code class=" language-php"><span class="token operator">*</span><span class="token punctuation">.</span>dev</code> 域名并指向本地安装的站点目录。</p><p>换句话说,一个速度极快的 Laravel 开发环境仅仅需要占用 7MB 内存。 Valet 并不是想要替代 Vagrant 或者 Homestead,只是提供另外一种选择,更加灵活、方便、以及占用更小的内存。</p><p>开箱即用, Valet 为我们提供以下软件和工具支持,然而不仅限于此:</p><div class="content-list"><ul><li><a href="https://laravel.com">Laravel</a></li><li><a href="https://lumen.laravel.com">Lumen</a></li><li><a href="https://symfony.com">Symfony</a></li><li><a href="https://framework.zend.com">Zend</a></li><li><a href="https://cakephp.org">CakePHP 3</a></li><li><a href="https://wordpress.org">WordPress</a></li><li><a href="https://roots.io/bedrock/">Bedrock</a></li><li><a href="https://craftcms.com">Craft</a></li><li><a href="https://statamic.com">Statamic</a></li><li><a href="http://jigsaw.tighten.co">Jigsaw</a></li><li>Static HTML</li></ul></div><p>当然,你还可以通过 <a href="#custom-valet-drivers">自定义驱动</a> 来扩展 Valet.</p><p><a name="valet-or-homestead"></a></p><h3>选择 Valet 还是 Homestead</h3><p>正如你所知道的, Laravel 提供另外一个开发环境 <a href="/docs/5.4/homestead">Homestead</a> , Homestead 和 Valet 不同之处在于两者的目标受众和本地开发方式。 Homestead 提供一个完整的包含自动化配置 Nginx 的 Ubuntu 虚拟机。如果你需要一个完整的虚拟化 Linux 开发环境或者是使用 Windows / Linux 操作系统,那么 Homestead 无疑是最佳选择。</p><p>Valet 只支持 Mac ,并且要求本地安装 PHP 和数据库服务器,这可以通过使用 <a href="http://brew.sh/">Homebrew</a> 命令 <code class=" language-php">brew install php71</code> 和 <code class=" language-php">brew install mysql</code> 轻松实现。 Valet 通过最小的资源消耗提供一个本地极速开发环境,如果你只需要 PHP / MySQL 而不是完整的虚拟化开发环境,那么 Valet 将是最好的选择。</p><p>Valet 和 Homestead 都是配置你本地 Laravel 开发环境的好帮手。选择使用哪一个取决于你的个人喜好和团队需求。</p><p><a name="installation"></a></p><h2><a href="#installation">安装</a></h2><p><strong>Valet 要求 macOS 和 <a href="http://brew.sh/">Homebrew</a> 安装之前,你需要确保没有其他程序如 Apache 或者 Nginx 占用你本地机器的 80 端口。 安装步骤如下:</strong></p><div class="content-list"><ul><li>安装或更新 <a href="http://brew.sh/">Homebrew</a> 到最新版本,使用命令 <code class=" language-php">brew update</code></li><li>使用命令 <code class=" language-php">brew install homebrew<span class="token operator">/</span>php<span class="token operator">/</span>php71</code> 安装 PHP 7.1 。</li><li>通过 <code class=" language-php">composer <span class="token keyword">global</span> <span class="token keyword">require</span> laravel<span class="token operator">/</span>valet</code> 命令安装 Valet 。请确定 <code class=" language-php"><span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>composer<span class="token operator">/</span>vendor<span class="token operator">/</span>bin</code> 存在于你的系统环境变量 「PATH」 中。</li><li>运行 <code class=" language-php">valet install</code> 命令。它将会配置并安装 Valet 和 DnsMasq ,并且将 Valet 的进程注册为随系统启动</li></ul></div><p>一旦你完成 Valet 安装,尝试使用像 <code class=" language-php">ping foobar<span class="token punctuation">.</span>dev</code> 这样的命令在终端 ping 任意的 <code class=" language-php"><span class="token operator">*</span><span class="token punctuation">.</span>dev</code> 域名。如果 Valet 正常安装你会看到来自 <code class=" language-php"><span class="token number">127.0</span><span class="token punctuation">.</span><span class="token number">0.1</span></code> 的响应</p><p>Valet 将会在每次系统启动时自动启动,而不需要你每次运行 <code class=" language-php">valet start</code> 或 <code class=" language-php">valet install</code>。</p><h4>使用其他的顶级域名</h4><p>默认情况下, Valet 使用 <code class=" language-php"><span class="token punctuation">.</span>dev</code> 顶级域名。如果你喜欢其他域名,可以使用 <code class=" language-php">valet domain tld<span class="token operator">-</span>name</code> 命令。</p><p>例如,如果你想要使用 <code class=" language-php"><span class="token punctuation">.</span>app</code> 来代替 <code class=" language-php"><span class="token punctuation">.</span>dev</code> ,运行 <code class=" language-php">valet domain app</code> 然后 Valet 会自动使用 <code class=" language-php"><span class="token operator">*</span><span class="token punctuation">.</span>app</code> 来为你的项目命名。</p><h4>数据库</h4><p>如果你需要一个数据库,可以使用 <code class=" language-php">brew install mariadb</code> 命令试一试 MySQL 。你可以使用 host 为 <code class=" language-php"><span class="token number">127.0</span><span class="token punctuation">.</span><span class="token number">0.1</span></code> ,用户名 <code class=" language-php">root</code> ,密码为空进行数据库连接。</p><p><a name="upgrading"></a></p><h3>升级</h3><p>你可以使用 <code class=" language-php">composer <span class="token keyword">global</span> update</code> 命令升级你的 Valet 程序,升级之后,最好使用 <code class=" language-php">valet install</code> 命令更新 Valet 的配置文件。</p><h4>升级到 Valet 2.0</h4><p>Valet 2.0 将 Valet 的底层 Web 服务从 Caddy 切换到了 Nginx 。在你升级到这个版本之前你应该运行下面的命令来停止并卸载已经启动的 Caddy 进程:</p><pre class=" language-php"><code class=" language-php">valet stop
valet uninstall</code></pre><p>接下来,你应该升级到 Valet 的最新版本。取决于你安装 Valet 的方式,这通常通过 Git 或 Composer 来实现。如果你是通过 Composer 安装的 Valet 你应该使用下面的命令来更新到最新的主版本:</p><pre class=" language-php"><code class=" language-php">composer <span class="token keyword">global</span> <span class="token keyword">require</span> laravel<span class="token operator">/</span>valet</code></pre><p>当新的 Valet 源代码下载好了之后,你应该运行 <code class=" language-php">install</code> 命令:</p><pre class=" language-php"><code class=" language-php">valet install
valet restart</code></pre><p>在升级之后,它需要 re-park 或 re-link 你的站点。</p><p><a name="serving-sites"></a></p><h2><a href="#serving-sites">服务站点</a></h2><p>当 Valet 安装完成,你就可以启动服务站点。 Valet 为此提供了两个命令:<code class=" language-php">park</code> 和 <code class=" language-php">link</code></p><p><a name="the-park-command"></a></p><p><strong><code class=" language-php">park</code> 命令</strong></p><div class="content-list"><ul><li>在你的 Mac 中创建一个新的目录,例如 <code class=" language-php">mkdir <span class="token operator">~</span><span class="token operator">/</span>Sites</code> 。然后 <code class=" language-php">cd <span class="token operator">~</span><span class="token operator">/</span>Sites</code> 并且运行 <code class=" language-php">valet park</code> 。这个命令将在当前所在目录作为 Web 根目录, Valet 将会在这个目录中搜索站点。</li><li>接下来,在这个目录中创建一个新的 Laravel 站点: <code class=" language-php">laravel <span class="token keyword">new</span> <span class="token class-name">blog</span></code> 。</li><li>在浏览器中访问 <code class=" language-php">http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>blog<span class="token punctuation">.</span>dev</code> 。</li></ul></div><p><strong>这就是我们所要做的全部工作</strong>。现在,所有在 Site 目录中的 Laravel 项目都可以通过 <code class=" language-php">http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>folder<span class="token operator">-</span>name<span class="token punctuation">.</span>dev</code> 这种方式访问,是不是很方便。</p><p><a name="the-link-command"></a></p><p><strong><code class=" language-php">link</code> 命令</strong></p><p>link 命令也被用来服务你的 Laravel 站点。这个命令在你想要在目录中提供单个站点是很有用。</p><div class="content-list"><ul><li>要使用这个命令,在你的终端中切换到你的某个项目并运行 <code class=" language-php">valet link app<span class="token operator">-</span>name</code> 。 Valet 将会在 <code class=" language-php"><span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>valet<span class="token operator">/</span>Sites</code> 中创建一个符号链接并指向当前工作目录。</li><li>运行完 <code class=" language-php">link</code> 命令, 你可以在浏览器中通过 <code class=" language-php">http<span class="token punctuation">:</span><span class="token operator">/</span><span class="token operator">/</span>app<span class="token operator">-</span>name<span class="token punctuation">.</span>dev</code> 来访问站点。</li></ul></div><p>要查看所有的链接目录,运行 <code class=" language-php">valet links</code> 命令。你也可以通过 <code class=" language-php">valet unlink app<span class="token operator">-</span>name</code> 来删除符号链接。</p><blockquote class="has-icon tip"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="56.6px" height="87.5px" viewBox="0 0 56.6 87.5" enable-background="new 0 0 56.6 87.5" xml:space="preserve"><path fill="#FFFFFF" d="M28.7 64.5c-1.4 0-2.5-1.1-2.5-2.5v-5.7 -5V41c0-1.4 1.1-2.5 2.5-2.5s2.5 1.1 2.5 2.5v10.1 5 5.8C31.2 63.4 30.1 64.5 28.7 64.5zM26.4 0.1C11.9 1 0.3 13.1 0 27.7c-0.1 7.9 3 15.2 8.2 20.4 0.5 0.5 0.8 1 1 1.7l3.1 13.1c0.3 1.1 1.3 1.9 2.4 1.9 0.3 0 0.7-0.1 1.1-0.2 1.1-0.5 1.6-1.8 1.4-3l-2-8.4 -0.4-1.8c-0.7-2.9-2-5.7-4-8 -1-1.2-2-2.5-2.7-3.9C5.8 35.3 4.7 30.3 5.4 25 6.7 14.5 15.2 6.3 25.6 5.1c13.9-1.5 25.8 9.4 25.8 23 0 4.1-1.1 7.9-2.9 11.2 -0.8 1.4-1.7 2.7-2.7 3.9 -2 2.3-3.3 5-4 8L41.4 53l-2 8.4c-0.3 1.2 0.3 2.5 1.4 3 0.3 0.2 0.7 0.2 1.1 0.2 1.1 0 2.2-0.8 2.4-1.9l3.1-13.1c0.2-0.6 0.5-1.2 1-1.7 5-5.1 8.2-12.1 8.2-19.8C56.4 12 42.8-1 26.4 0.1zM43.7 69.6c0 0.5-0.1 0.9-0.3 1.3 -0.4 0.8-0.7 1.6-0.9 2.5 -0.7 3-2 8.6-2 8.6 -1.3 3.2-4.4 5.5-7.9 5.5h-4.1H28h-0.5 -3.6c-3.5 0-6.7-2.4-7.9-5.7l-0.1-0.4 -1.8-7.8c-0.4-1.1-0.8-2.1-1.2-3.1 -0.1-0.3-0.2-0.5-0.2-0.9 0.1-1.3 1.3-2.1 2.6-2.1H41C42.4 67.5 43.6 68.2 43.7 69.6zM37.7 72.5H26.9c-4.2 0-7.2 3.9-6.3 7.9 0.6 1.3 1.8 2.1 3.2 2.1h4.1 0.5 0.5 3.6c1.4 0 2.7-0.8 3.2-2.1L37.7 72.5z"></path></svg></span></div> 你可以通过使用 <code class=" language-php">valet link</code> 将多个(子)域名指向同一个应用,要添加子域名或其它域名到应用,可以在应用目录下运行 <code class=" language-php">valet link subdomain<span class="token punctuation">.</span>app<span class="token operator">-</span>name</code> 。</p></blockquote><p><a name="securing-sites"></a></p><p><strong>通过TLS让站点更安全</strong></p><p>默认的情况下, Valet 通过纯 HTTP 协议服务网站。然而,如果你想利用 HTTP/2 提供加密的 TLS ,你可以使用 <code class=" language-php">secure</code> 命令。例如,你有一个站点 <code class=" language-php">laravel<span class="token punctuation">.</span>dev</code> ,可以使用以下命令让其更安全:</p><pre class=" language-php"><code class=" language-php">valet secure laravel</code></pre><p>想恢复一个站点到普通的 HTTP 使用 <code class=" language-php">unsecure 命令</code>,这个命令可以去除 secure 增加的安全加密:</p><pre class=" language-php"><code class=" language-php">valet unsecure laravel</code></pre><p><a name="sharing-sites"></a></p><h2><a href="#sharing-sites">分享站点</a></h2><p>Valet 还提供一个命令将本地站点分享给其他人,这不需要任何额外安装软件即可实现。</p><p>要分享站点,在你的终端中切换到站点目录使用 <code class=" language-php">valet share</code> 命令。这会生成一个可以公开访问的 URL 并插入你的剪切板,以便你直接粘贴到浏览器,就是这么简单。</p><p>要停止分享站点,使用 <code class=" language-php">Control <span class="token operator">+</span> C</code> 快捷组合键即可。</p><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> <code class=" language-php">valet share</code> 目前尚不支持分享使用 <code class=" language-php">valet secure</code> 命令进行安全处理的站点。</p></blockquote><p><a name="custom-valet-drivers"></a></p><h2><a href="#custom-valet-drivers">自定义 Valet 驱动</a></h2><p>你可以编写自定义的 Valet 「驱动」运行非原生支持的其他 PHP 框架或 CMS 。安装完 Valet 时会创建一个 <code class=" language-php"><span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>valet<span class="token operator">/</span>Drivers</code> 目录,该目录中有一个 <code class=" language-php">SampleValetDriver<span class="token punctuation">.</span>php</code> 文件。这个文件中简单演示如何编写自定义驱动。 编写驱动只需要实现三个方法: <code class=" language-php">serves</code> ,<code class=" language-php">isStaticFile</code> 和 <code class=" language-php">frontControllerPath</code> 。</p><p>这三个方法都接收 <code class=" language-php"><span class="token variable">$sitePath</span></code> ,<code class=" language-php"><span class="token variable">$siteName</span></code> 和 <code class=" language-php"><span class="token variable">$uri</span></code> 作为参数。 <code class=" language-php"><span class="token variable">$sitePath</span></code> 表示站点的绝对路径,例如 <code class=" language-php"><span class="token operator">/</span>Users<span class="token operator">/</span>Lisa<span class="token operator">/</span>Sites<span class="token operator">/</span>my<span class="token operator">-</span>project</code> 。 <code class=" language-php"><span class="token variable">$siteName</span></code> 表示站点的 「host」/ 「站点名称」 部分,如 (<code class=" language-php">my<span class="token operator">-</span>project</code>) 。 <code class=" language-php"><span class="token variable">$uri</span></code> 则是输入的请求 URI,如 (<code class=" language-php"><span class="token operator">/</span>foo<span class="token operator">/</span>bar</code>) 。</p><p>编写好你的自定义 Valet 驱动,将其放到 <code class=" language-php"><span class="token operator">~</span><span class="token operator">/</span><span class="token punctuation">.</span>valet<span class="token operator">/</span>Drivers</code> 目录并遵循 <code class=" language-php">FrameworkValetDriver<span class="token punctuation">.</span>php</code> 这种命名规范。例如,如果编写一个自定义的 WordPress 驱动,对应的文件名称应是 <code class=" language-php">WordPressValetDriver<span class="token punctuation">.</span>php</code> 。</p><p>下面我们来具体讨论并演示自定义 Valet 驱动需要实现的三个方法。</p><h4><code class=" language-php">serves</code> 方法</h4><p>如果自定义驱动要继续处理输入请求, <code class=" language-php">serves</code> 方法应该返回 <code class=" language-php"><span class="token boolean">true</span></code> , 否则该方法返回 <code class=" language-php"><span class="token boolean">false</span></code> 。 因此,这个方法应该判断给定的 <code class=" language-php"><span class="token variable">$sitePath</span></code> 是否是包含你服务项目的类型。</p><p>例如,假设我们编写的是 <code class=" language-php">WordPressValetDriver</code> 。那么对应的 serves 方法如下:</p><pre class=" language-php"><code class=" language-php"><span class="token comment" spellcheck="true">/**
* 判断驱动服务请求
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return bool
*/</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">serves<span class="token punctuation">(</span></span><span class="token variable">$sitePath</span><span class="token punctuation">,</span> <span class="token variable">$siteName</span><span class="token punctuation">,</span> <span class="token variable">$uri</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token function">is_dir<span class="token punctuation">(</span></span><span class="token variable">$sitePath</span><span class="token punctuation">.</span><span class="token string">'/wp-admin'</span><span class="token punctuation">)</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre><h4><code class=" language-php">isStaticFile</code> 方法</h4><p><code class=" language-php">isStaticFile</code> 应该判断进入的请求是否是静态文件,例如图片或者样式文件,如果文件是静态的,该方法会返回磁盘上的绝对路径,否则返回 <code class=" language-php"><span class="token boolean">false</span></code>:</p><pre class=" language-php"><code class=" language-php"><span class="token comment" spellcheck="true">/**
* 判断请求内容是否是静态文件。
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string|false
*/</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">isStaticFile<span class="token punctuation">(</span></span><span class="token variable">$sitePath</span><span class="token punctuation">,</span> <span class="token variable">$siteName</span><span class="token punctuation">,</span> <span class="token variable">$uri</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token function">file_exists<span class="token punctuation">(</span></span><span class="token variable">$staticFilePath</span> <span class="token operator">=</span> <span class="token variable">$sitePath</span><span class="token punctuation">.</span><span class="token string">'/public/'</span><span class="token punctuation">.</span><span class="token variable">$uri</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token variable">$staticFilePath</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span>
<span class="token keyword">return</span> <span class="token boolean">false</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre><blockquote class="has-icon note"><p><div class="flag"><span class="svg"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" version="1.1" x="0px" y="0px" width="90px" height="90px" viewBox="0 0 90 90" enable-background="new 0 0 90 90" xml:space="preserve"><path fill="#FFFFFF" d="M45 0C20.1 0 0 20.1 0 45s20.1 45 45 45 45-20.1 45-45S69.9 0 45 0zM45 74.5c-3.6 0-6.5-2.9-6.5-6.5s2.9-6.5 6.5-6.5 6.5 2.9 6.5 6.5S48.6 74.5 45 74.5zM52.1 23.9l-2.5 29.6c0 2.5-2.1 4.6-4.6 4.6 -2.5 0-4.6-2.1-4.6-4.6l-2.5-29.6c-0.1-0.4-0.1-0.7-0.1-1.1 0-4 3.2-7.2 7.2-7.2 4 0 7.2 3.2 7.2 7.2C52.2 23.1 52.2 23.5 52.1 23.9z"></path></svg></span></div> <code class=" language-php">isStaticFile</code> 方法只有在 <code class=" language-php">serves</code> 方法返回 <code class=" language-php"><span class="token boolean">true</span></code> 并且请求 URI 不是 <code class=" language-php"><span class="token operator">/</span></code> 才会被调用。</p></blockquote><h4><code class=" language-php">frontControllerPath</code> 方法</h4><p><code class=" language-php">frontControllerPath</code> 方法应该返回「前端控制器」的绝对路径,通常是你的 「index.php」文件或其他同等文件:</p><pre class=" language-php"><code class=" language-php"><span class="token comment" spellcheck="true">/**
* 获取应用前端控制器绝对路径。
*
* @param string $sitePath
* @param string $siteName
* @param string $uri
* @return string
*/</span>
<span class="token keyword">public</span> <span class="token keyword">function</span> <span class="token function">frontControllerPath<span class="token punctuation">(</span></span><span class="token variable">$sitePath</span><span class="token punctuation">,</span> <span class="token variable">$siteName</span><span class="token punctuation">,</span> <span class="token variable">$uri</span><span class="token punctuation">)</span>
<span class="token punctuation">{</span>
<span class="token keyword">return</span> <span class="token variable">$sitePath</span><span class="token punctuation">.</span><span class="token string">'/public/index.php'</span><span class="token punctuation">;</span>
<span class="token punctuation">}</span></code></pre><p><a name="other-valet-commands"></a></p><h2><a href="#other-valet-commands">其他 Valet 命令</a></h2><table><thead><tr><th>命令</th><th>描述</th></tr></thead><tbody><tr><td><code class=" language-php">valet forget</code></td><td>在某个站点根路径运行该命令可在根目录列表中移除该目录</td></tr><tr><td><code class=" language-php">valet paths</code></td><td>查看所有站点根路径</td></tr><tr><td><code class=" language-php">valet restart</code></td><td>重启</td></tr><tr><td><code class=" language-php">valet start</code></td><td>启动</td></tr><tr><td><code class=" language-php">valet stop</code></td><td>停止</td></tr><tr><td><code class=" language-php">valet uninstall</code></td><td>卸载</td></tr></tbody></table><h2>译者署名</h2><table><thead><tr><th>用户名</th><th>头像</th><th>职能</th><th>签名</th></tr></thead><tbody><tr><td><a href="https://laravel-china.org/users/1232">@lybc</a></td><td><img class="avatar-66 rm-style" src="https://dn-phphub.qbox.me/uploads/avatars/1232_1469434413.jpg?imageView2/1/w/100/h/100"></td><td>翻译</td><td>有用是有趣的前提</td></tr></tbody></table></article>
- 入门指南
- 安装
- 配置信息
- 文件夹结构
- 请求周期
- 开发环境部署
- Valet
- Homestead
- 核心概念
- 服务提供者
- Facades
- Contracts
- 服务容器
- HTTP 层
- 路由
- 中间件
- CSRF 保护
- 控制器
- 请求
- 响应
- 视图
- Session
- 表单验证
- 前端
- Blade 模板
- 本地化
- 前端指南
- 编辑资源 Mix
- 安全
- API 认证
- 用户认证
- 用户授权
- 加密解密
- 哈希
- 重置密码
- 数据库
- 快速入门
- 查询构造器
- 分页
- 数据库迁移
- Redis
- 数据填充
- Eloquent ORM
- Eloquent ORM快速入门
- 模型关联
- Eloquent 集合
- 修改器
- 序列化
- 综合话题
- Artisan 命令行
- 广播系统
- 缓存系统
- 集合
- 错误与日志
- 事件系统
- 文件存储
- 辅助函数
- 邮件发送
- 消息通知
- 扩展包开发
- 队列
- 任务调度