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的主要内容,如果未能解决你的问题,请参考以下文章

Laravel Artisan CLI 不执行命令

如何将 Artisan cli 添加到现有的 laravel 项目?

Laravel 4 migrate:rollback with --path on artisan CLI

Laravel 4 migrate:rollback with --path on artisan CLI

Laravel 4.2 artisan CLI 在作曲家更新后不再工作

如何更改 Laravel Artisan CLI PHP 版本?