Laravel Artisan CLI 没有正确设置 URL
Laravel Artisan CLI doesn't set the right URL
剧情简介
我在理解 Artisan
如何处理环境和 .env
文件时遇到一些问题。
我的问题是,当我从使用 url
助手的命令行任务生成电子邮件时,我无法生成正确的 link.
当我尝试 运行 以下命令时,我的电子邮件包含 http://localhost/<link part>
而不是 http://domain.local/
;我也在本地工作。
php artisan account:probation --method=notify
php artisan --env=production account:probation --method=notify
php artisan --env=local account:probation --method=notify
编辑 我的数据库连接设置在 .env
内并连接,因为它收集发送电子邮件所需的电子邮件地址以及创建的 date/time,同时不能按照 .env
.
使用 APP_URL
当这些相同的电子邮件 运行 通过应用程序正确设置时:http://domain.local/
,所以现在我有点困惑。
检查 config/app.php
中的 'url'
键。这是 Artisan 拾取的值。默认设置为 'http://localhost'
.
如果您想在 .env
文件中使用 APP_URL
指定此值,则需要将配置文件中的 'url'
键更改为:
'url' => env('APP_URL'),
编辑
当通过网络 运行 时,有效的 Request
对象已经可用。当通过 Artisan 运行 时,Laravel 必须创建一个伪造的 Request
对象。它使用配置中定义的 url 执行此操作。
这个值被传递给 Symfony Request
对象的 create
方法。此方法使用本机 parse_url
方法将值分解为 url 个组件。如果解析的 url 不包含 host
组件,它将默认为 localhost.
给定 domain.local
的 url,您将得到以下结果:
print_r(parse_url('domain.local'));
=====
Array
(
[path] => domain.local
)
由于组件不包含 host
组件,主机将默认为本地主机。
如果您使用 //domain.local
,您会得到以下结果:
print_r(parse_url('//domain.local'));
=====
Array
(
[host] => domain.local
)
现在 host
组件已经存在,它将用于您的 Artisan 命令所需的任何 URL 生成。
要查看更多信息的源代码:
从配置中获取 url 并创建 Request
:
https://github.com/laravel/framework/blob/5.0/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php
正在生成的 Symfony Request
(上面调用的 create
方法):
https://github.com/symfony/HttpFoundation/blob/master/Request.php
剧情简介
我在理解 Artisan
如何处理环境和 .env
文件时遇到一些问题。
我的问题是,当我从使用 url
助手的命令行任务生成电子邮件时,我无法生成正确的 link.
当我尝试 运行 以下命令时,我的电子邮件包含 http://localhost/<link part>
而不是 http://domain.local/
;我也在本地工作。
php artisan account:probation --method=notify
php artisan --env=production account:probation --method=notify
php artisan --env=local account:probation --method=notify
编辑 我的数据库连接设置在 .env
内并连接,因为它收集发送电子邮件所需的电子邮件地址以及创建的 date/time,同时不能按照 .env
.
APP_URL
当这些相同的电子邮件 运行 通过应用程序正确设置时:http://domain.local/
,所以现在我有点困惑。
检查 config/app.php
中的 'url'
键。这是 Artisan 拾取的值。默认设置为 'http://localhost'
.
如果您想在 .env
文件中使用 APP_URL
指定此值,则需要将配置文件中的 'url'
键更改为:
'url' => env('APP_URL'),
编辑
当通过网络 运行 时,有效的 Request
对象已经可用。当通过 Artisan 运行 时,Laravel 必须创建一个伪造的 Request
对象。它使用配置中定义的 url 执行此操作。
这个值被传递给 Symfony Request
对象的 create
方法。此方法使用本机 parse_url
方法将值分解为 url 个组件。如果解析的 url 不包含 host
组件,它将默认为 localhost.
给定 domain.local
的 url,您将得到以下结果:
print_r(parse_url('domain.local'));
=====
Array
(
[path] => domain.local
)
由于组件不包含 host
组件,主机将默认为本地主机。
如果您使用 //domain.local
,您会得到以下结果:
print_r(parse_url('//domain.local'));
=====
Array
(
[host] => domain.local
)
现在 host
组件已经存在,它将用于您的 Artisan 命令所需的任何 URL 生成。
要查看更多信息的源代码:
从配置中获取 url 并创建 Request
:
https://github.com/laravel/framework/blob/5.0/src/Illuminate/Foundation/Bootstrap/SetRequestForConsole.php
正在生成的 Symfony Request
(上面调用的 create
方法):
https://github.com/symfony/HttpFoundation/blob/master/Request.php