Laravel 由命令/计划触发时,找不到通知映像

Laravel 由命令/计划触发时,找不到通知映像,laravel,notifications,schedule,mailmessage,Laravel,Notifications,Schedule,Mailmessage,当我通过控制器触发通知时,MailMessage发送的消息没有问题,所有图像都包含在内 但是,当通过调用控制台命令的计划项触发相同的通知时,无法找到图像 您没有显示任何代码,但我想我知道您在说什么 如果你的APP\u URL包含一个目录(例如http://localhost/myproject),并且您使用asset()引用视图中的图像,当视图是从浏览器请求生成的,而不是从队列、计划作业或CLI生成时,生成的引用将正常工作。在CLI中,您的应用程序URL的目录部分在生成的引用中丢失,您的图像将被

当我通过控制器触发通知时,MailMessage发送的消息没有问题,所有图像都包含在内


但是,当通过调用控制台命令的计划项触发相同的通知时,无法找到图像

您没有显示任何代码,但我想我知道您在说什么

如果你的
APP\u URL
包含一个目录(例如
http://localhost/myproject
),并且您使用
asset()
引用视图中的图像,当视图是从浏览器请求生成的,而不是从队列、计划作业或CLI生成时,生成的引用将正常工作。在CLI中,您的
应用程序URL的目录部分在生成的引用中丢失,您的图像将被破坏

这是来自Symfony的Laravel中的一个已知问题。看起来好像一个月前刚修好:

更新

这里有一个具体的例子。我正在使用Laravel5.2(尽管根据上面的问题,它在8月底的5.4版本中得到了修复,所以在最新版本中都会出现),当用户在网站上做一些事情时,我会发送一封事务性电子邮件。我更新了我的电子邮件视图以转储一些值

浏览器请求,实时邮件,带有
mail::send()
,以及
QUEUE\u DRIVER=sync

env('APP_URL')           http://localhost/myproject                 // OK
config('app.url')        http://localhost/myproject                 // OK
asset('/images/foo.png') http://localhost/myproject/images/foo.png  // OK 
这些值都是正确的,
asset()
生成的URL正确显示了我的电子邮件图像

CLI请求,队列邮件,带有
mail::queue()
,以及
queue\u DRIVER=数据库

env('APP_URL')           http://localhost/myproject                 // OK
config('app.url')        http://localhost/myproject                 // OK
asset('/images/foo.png') http://localhost/images/foo.png            // xxxx
注意
asset()
生成的URL中缺少
myproject/
。我电子邮件中的所有图像引用都已损坏,图像未显示

除了升级到修复此问题的Laravel版本之外,您所能做的就是不要在将从CLI生成的任何视图中使用
asset()
,而是手动指定资产路径:

config('app.url') . '/images/' . $product->image
旁注——正如@Desh901在评论中指出的那样:

如果在部署过程中执行config:cache命令,则应确保仅从配置文件中调用env函数


如果您需要代码来帮助回答这个问题,请告诉我,我会提供它。我只是想知道社区是否意识到这是一个更普遍的问题。是的,请提供一些代码和您收到的确切错误。@JamesWolfe我的回答有帮助吗?您不应该在配置文件之外使用
env
,因为一旦配置被缓存,Laravel将不再加载
.env
文件,
env()
调用将导致每个参数为null。