【发布时间】:2017-06-10 10:27:22
【问题描述】:
我有一个 Laravel 5.2 应用程序,当用户购买产品时它会发送一些电子邮件。电子邮件视图包括对一些图像的引用,如下所示:
<img src="{{ asset($purchase->image) }}">
这在我拥有的所有 3 个环境中都可以正常工作 - 本地、暂存和生产。 asset() 使用每个环境中配置的 APP_URL 正确地构造了相应图像的完全限定 URL。
我决定改用Laravel queues 发送邮件。
- 我将
.env中的QUEUE_DRIVER更改为database php artisan queue:tablephp artisan migratephp artisan queue:listen-
改变
\Illuminate\Support\Facades\Mail::send(到
\Illuminate\Support\Facades\Mail::queue(
并进行了测试购买。该过程有效,已发送邮件,但已发送电子邮件中的图像 URL 错误。好像我配置的 APP_URL 没有被拾取。
.env
APP_URL=http://localhost/path/to/app
config/app.php
'url' => env('APP_URL', 'http://localhost'),
asset() 在我的电子邮件中生成的 URL 是:
http://localhost/images/foo.jpg
这是不正确的,它们应该是:
http://localhost/path/to/app/images/foo.jpg
使用队列时,我的.env 中定义的APP_URL 似乎没有出现,因此使用了http://localhost 的默认值。不使用队列,同样的代码也能正常工作。
我唯一能想到的是,处理队列的 CLI PHP 环境与 Apache PHP 环境有些不同,但我无法想象有什么区别会导致 .env 被忽略。
我在 2 年前从使用 Laravel 4.2 的人那里找到了一个 similar question,但没有任何答复。我发现了其他一些类似的参考资料,但没有解决方案。有人看过这个或有什么建议吗?
【问题讨论】:
-
我知道这很愚蠢。但是
env('APP_URL').'/images/'.$purchase->imagep.s. 怎么样?这只是一种解决方法,也许对于命令行执行它需要不同的 env 文件?你能检查asset方法的代码吗? -
我觉得这个问题还没有解决。在我的自定义工匠控制台命令中,我总是使用确切的路径、url 等,因为这个问题从来没有按原样工作。
-
谢谢,猜猜这就是我必须做的......谢谢你的帮助!
-
@num8er 我知道已经晚了,但您的评论确实是答案 - 这是一个错误。如果您想将其重新发布为答案,我很乐意接受! :-)
-
谢谢)我不是在寻找赞成票)只是想提供帮助。只需总结您的解决方案并用解决方案回答您自己的问题,对来这里的人有所帮助
标签: php laravel-5.2