Laravel Artisan CLI 没有设置正确的 URL
Posted
技术标签:
【中文标题】Laravel Artisan CLI 没有设置正确的 URL【英文标题】:Laravel Artisan CLI doesn't set the right URL 【发布时间】:2015-07-02 07:23:11 【问题描述】:概要
我在理解 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
edit 我的数据库连接设置在 .env
内并连接,因为它收集发送电子邮件所需的电子邮件地址以及创建的日期/时间,但无法按照.env
使用APP_URL
。
当这些相同的电子邮件通过应用程序运行时,它们被正确设置为:http://domain.local/
,所以现在我有点困惑。
【问题讨论】:
【参考方案1】:查看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
组件,主机将默认为 localhost。
如果您使用//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
【讨论】:
这正是我所拥有的:S @Ash 这对我有用。如果您使用过php artisan config:cache
,请确保在进行任何更改后清除或重新缓存配置。此外,请确保您的 APP_URL 值包含协议(例如以 http://
开头),否则它将在您设置的任何值前面加上 http://localhost
。
@Ash 还有一点需要注意:如果您的机器设置了 $APP_URL 环境变量,则该值将优先于 .env 文件中的任何内容。具体来说,如果您的 $APP_URL 变量设置为空字符串,那么您的 url 将设置为 http://localhost
。您可以检查它是否设置为:if [ -z $APP_URL+x ]; then echo 'not set'; else echo 'set'; fi
。您可以使用以下命令取消设置:unset APP_URL
。 (你不能只做export APP_URL=
,因为那是把它设置为空字符串,这不是你想要的。)
当我运行它时,我得到“未设置”。
@Ash 您是否尝试过php artisan config:clear
以确保您没有看到缓存值?以上是关于Laravel Artisan CLI 没有设置正确的 URL的主要内容,如果未能解决你的问题,请参考以下文章
如何将 Artisan cli 添加到现有的 laravel 项目?
Laravel 4 migrate:rollback with --path on artisan CLI
Laravel 4 migrate:rollback with --path on artisan CLI