我有一个Laravel 5.2应用程序,当用户购买产品时会发送一些电子邮件。电子邮件视图包含对某些图像的引用,如下所示:
<img src="{{ asset($purchase->image) }}">
这在我拥有的所有3种环境中都很好 - 本地,登台和制作。 asset()
使用每个环境中配置的APP_URL正确地将完全限定的URL构建到适当的图像。
我决定转而使用Laravel queues发送电子邮件。
QUEUE_DRIVER
中的.env
更改为database
php artisan queue:table
php artisan migrate
php artisan queue:listen
更改
\Illuminate\Support\Facades\Mail::send(
到
\Illuminate\Support\Facades\Mail::queue(
并进行了测试购买。该过程有效,邮件已发送,但传递的电子邮件中的图像URL错误。似乎我的配置APP_URL没有被选中。
.ENV
APP_URL=http://localhost/path/to/app
配置/ app.php
'url' => env('APP_URL', 'http://localhost'),
我的电子邮件中生成的网址asset()
为:
http://localhost/images/foo.jpg
这是不正确的,它们应该是:
http://localhost/path/to/app/images/foo.jpg
看起来使用我的APP_URL
中定义的.env
排队的队列,因此使用默认的http://localhost
。不使用队列,相同的代码工作正常。
我唯一能想到的是处理队列的CLI PHP环境与Apache PHP环境有某些不同,但我无法想象会有什么区别会导致.env
被忽略。< / p>
2年前,我找到了使用Laravel 4.2的人similar question,没有回答。我找到了一些其他类似的参考但没有解决方案。有人见过这个或有任何建议吗?
答案 0 :(得分:0)
感谢@ num8er寻找解决方案。
这是Laravel中一个来自Symfony的已知问题:https://github.com/laravel/framework/issues/14139
解决方法是在评论中建议@ num8er,在视图中硬编码资产路径,而不是使用asset()
:
config('app.url') . '/images/' . $purchase->image