我在理解Artisan
如何使用环境和.env
文件方面遇到了一些麻烦。
我的问题是当我从命令行上的任务生成电子邮件时,使用url
帮助器我无法生成正确的链接。
当我尝试运行以下命令时,我的电子邮件包含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
内并连接,因为它收集了发送电子邮件所需的电子邮件地址以及创建的日期/时间,而不是能够根据APP_URL
使用.env
。
当这些相同的电子邮件通过应用程序运行时,它们被正确设置为:http://domain.local/
,所以现在我有点困惑。
答案 0 :(得分:3)
查看'url'
中的config/app.php
键。这是Artisan获得的价值。默认情况下,它设置为'http://localhost'
。
如果您想使用APP_URL
文件中的.env
指定此值,则需要将配置文件中的'url'
键更改为:
'url' => env('APP_URL'),
通过网络运行时,有效的Request
对象已可用。当通过Artisan运行时,Laravel必须创建一个假的Request
对象。它使用配置中定义的URL来完成此操作。
此值将传递给Symfony create
对象上的Request
方法。此方法使用本机parse_url
方法将值分解为url组件。如果解析的URL不包含host
组件,则默认为localhost。
给定domain.local
的网址,您会得到以下结果:
print_r(parse_url('domain.local'));
=====
Array
(
[path] => domain.local
)
由于组件不包含host
组件,因此主机将默认为localhost。
如果您使用//domain.local
,则会得到以下结果:
print_r(parse_url('//domain.local'));
=====
Array
(
[host] => domain.local
)
现在host
组件存在,这将用于Artisan命令所需的任何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