ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
<article><h1>Laravel 的配置信息</h1><ul><li><a href="#introduction">基础介绍</a></li><li><a href="#environment-configuration">环境配置</a><ul><li><a href="#determining-the-current-environment">判定目前使用的环境</a></li></ul></li><li><a href="#accessing-configuration-values">获取设置值</a></li><li><a href="#configuration-caching">缓存配置信息</a></li><li><a href="#maintenance-mode">维护模式</a></li></ul><p><a name="introduction"></a></p><h2><a href="#introduction">基础介绍</a></h2><p>所有 Laravel 框架的配置文件都放置在 <code class=" language-php">config</code> 目录下。每个选项都有说明,请仔细阅读这些说明,并熟悉这些选项配置。</p><p><a name="environment-configuration"></a></p><h2><a href="#environment-configuration">环境配置</a></h2><p>应用程序常常需要根据不同的运行环境设置不同的值。例如,你会希望在本机开发环境上有与正式环境不同的缓存驱动。类似这种环境变量,只需通过 <code class=" language-php"><span class="token punctuation">.</span>env</code> 配置文件就可轻松完成。</p><p>Laravel 使用 Vance Lucas 的 <a href="https://github.com/vlucas/phpdotenv">DotEnv</a> PHP 函数库来实现项目内环境变量的控制,在安装好的全新 Laravel 应用程序里,在根目录下会包含一个 <code class=" language-php"><span class="token punctuation">.</span>env<span class="token punctuation">.</span>example</code> 文件。如果你通过 Composer 安装 Laravel,这个文件将自动被更名为 <code class=" language-php"><span class="token punctuation">.</span>env</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"><span class="token punctuation">.</span>env<span class="token punctuation">.</span>testing</code> 文件。当在运行 PHPUnit 测试或者带有 <code class=" language-php"><span class="token operator">--</span>env<span class="token operator">=</span>testing</code> 选项运行 Artisan 命令的时候,这个 <code class=" language-php"><span class="token punctuation">.</span>env<span class="token punctuation">.</span>testing</code> 文件会覆盖掉 <code class=" language-php"><span class="token punctuation">.</span>env</code> 文件中对应的值。</p></blockquote><h4>获取环境变量</h4><p>当你的应用程序收到请求时,这个文件所有的变量都会被加载到 PHP 超级全局变量 <code class=" language-php"><span class="token global">$_ENV</span></code> 里。你可以使用辅助函数 <code class=" language-php">env</code> 来获取这些变量的值。事实上,如果你阅读过 Laravel 的相关配置文件,你会注意到里面有几个选项已经在使用着这个辅助函数!</p><pre class=" language-php"><code class=" language-php"><span class="token string">'debug'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token function">env<span class="token punctuation">(</span></span><span class="token string">'APP_DEBUG'</span><span class="token punctuation">,</span> <span class="token boolean">false</span><span class="token punctuation">)</span><span class="token punctuation">,</span></code></pre><p><code class=" language-php">env</code> 函数的第二个参数是默认值,如果未找到对应的环境变量配置的话,此值就会被返回。</p><p>根据本机服务器或者正式环境的需求的不同,可自由修改环境变量。但是,<code class=" language-php"><span class="token punctuation">.</span>env</code> 文件不应该被提交到版本控制系统,因为每个开发人员或服务器在使用应用程序时,可能需要不同的环境配置。</p><p>不妨将 <code class=" language-php"><span class="token punctuation">.</span>env<span class="token punctuation">.</span>example</code> 文件放进你的应用程序,通过样本配置文件里的预设值,团队中的其他开发人员就可以清楚地知道,在运行你的应用程序时有哪些环境变量是必须有的。</p><p><a name="determining-the-current-environment"></a></p><h3>判定目前使用的环境</h3><p>应用程序的当前环境是由 <code class=" language-php"><span class="token punctuation">.</span>env</code> 文件中的 <code class=" language-php"><span class="token constant">APP_ENV</span></code> 变量所决定的。你可以通过 <code class=" language-php">App</code> <a href="/docs/5.4/facades">facade</a> 的 <code class=" language-php">environment</code> 方法来获取该值:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$environment</span> <span class="token operator">=</span> <span class="token scope">App<span class="token punctuation">::</span></span><span class="token function">environment<span class="token punctuation">(</span></span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>你也可以传递参数至 <code class=" language-php">environment</code> 方法来确认当前环境是否与参数相符合:</p><pre class=" language-php"><code class=" language-php"><span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token scope">App<span class="token punctuation">::</span></span><span class="token function">environment<span class="token punctuation">(</span></span><span class="token string">'local'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // 当前正处于本地开发环境 </span><span class="token punctuation">}</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token scope">App<span class="token punctuation">::</span></span><span class="token function">environment<span class="token punctuation">(</span></span><span class="token string">'local'</span><span class="token punctuation">,</span> <span class="token string">'staging'</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token comment" spellcheck="true"> // 当前环境处于 `local` 或者 `staging` </span><span class="token punctuation">}</span></code></pre><p><a name="accessing-configuration-values"></a></p><h2><a href="#accessing-configuration-values">获取设置值</a></h2><p>可以使用 <code class=" language-php">config</code> 辅助函数获取你的设置值,设置值可以通过「点」语法来获取,其中包含了文件与选项的名称。你也可以指定一个默认值,当该设置选项不存在时就会返回默认值:</p><pre class=" language-php"><code class=" language-php"><span class="token variable">$value</span> <span class="token operator">=</span> <span class="token function">config<span class="token punctuation">(</span></span><span class="token string">'app.timezone'</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p>若要在运行期间修改设置值,请传递一个数组至 <code class=" language-php">config</code> 辅助函数:</p><pre class=" language-php"><code class=" language-php"><span class="token function">config<span class="token punctuation">(</span></span><span class="token punctuation">[</span><span class="token string">'app.timezone'</span> <span class="token operator">=</span><span class="token operator">&gt;</span> <span class="token string">'America/Chicago'</span><span class="token punctuation">]</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><p><a name="configuration-caching"></a></p><h2><a href="#configuration-caching">缓存配置信息</a></h2><p>为了让应用程序的速度获得提升,可以使用 Artisan 命令 <code class=" language-php">config<span class="token punctuation">:</span>cache</code> 将所有的配置文件缓存到单个文件。通过此命令将所有的设置选项合并成一个文件,让框架能够更快速的加载。</p><p>你应该将运行 <code class=" language-php">php artisan config<span class="token punctuation">:</span>cache</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">config<span class="token punctuation">:</span>cache</code> 命令,你应该确保在你的配置文件中你只调用了 <code class=" language-php">env</code> 函数。</p><p>译者注:更多 Laravel 程序调优技巧请参阅:<a href="https://phphub.org/topics/2020">Laravel 5 程序优化技巧</a></p></blockquote><p><a name="maintenance-mode"></a></p><h2><a href="#maintenance-mode">维护模式</a></h2><p>当你的应用程序处于维护模式时,所有传递至应用程序的请求都会显示出一个自定义视图。在你更新应用或进行性能维护时,这么做可以很轻松的「关闭」整个应用程序。维护模式会检查包含在应用程序的默认的中间件堆栈。如果应用程序处于维护模式,则 <code class=" language-php">MaintenanceModeException</code> 会抛出 503 的状态码。</p><p>启用维护模式,只需要运行 Artisan 命令 <code class=" language-php">down</code>:</p><pre class=" language-php"><code class=" language-php">php artisan down</code></pre><p>你可以指定 <code class=" language-php">dowm</code> 命令的 <code class=" language-php">message</code> 和 <code class=" language-php">retry</code> 选项。<code class=" language-php">message</code> 自定义显示给用户的信息,<code class=" language-php">retry</code> 作为 <code class=" language-php">Retry<span class="token operator">-</span>After</code> HTTP 标头返回:</p><pre class=" language-php"><code class=" language-php">php artisan down <span class="token operator">--</span>message<span class="token operator">=</span><span class="token string">'Upgrading Database'</span> <span class="token operator">--</span>retry<span class="token operator">=</span><span class="token number">60</span></code></pre><p>关闭维护模式,请使用 Artisan 命令 <code class=" language-php">up</code>:</p><pre class=" language-php"><code class=" language-php">php artisan up</code></pre><h4>维护模式的响应模板</h4><p>维护模式的默认模板放在 <code class=" language-php">resources<span class="token operator">/</span>views<span class="token operator">/</span>errors<span class="token operator">/</span><span class="token number">503</span><span class="token punctuation">.</span>blade<span class="token punctuation">.</span>php</code>。你可以根据你的需求来修改这个模版</p><h4>维护模式与队列</h4><p>当应用程序处于维护模式中时,将不会处理任何 <a href="/docs/5.4/queues">队列工作</a>。所有的队列工作将会在应用程序离开维护模式后被继续运行。</p><h4>维护模式的替代方案</h4><p>维护模式有几秒钟的服务器不可用时间,如果你想做到平滑迁移的话,推荐使用 <a href="https://envoyer.io">Envoyer</a> 服务。</p></article>