我的代码相当简单:
return response()->view("OneTimeLink", [ 'data' => $data ]);
我收到以下错误:
InvalidArgumentException: View [OneTimeLink] not found. in file /app/vendor/laravel/framework/src/Illuminate/View/FileViewFinder.php on line 137
在调试它时,我知道它应该有一个 .blade.php 扩展名。我重命名了文件,重建了 docker 映像,我得到了同样的错误。
我尝试过使用相对路径和绝对路径,并带有适当的(和 Windows 的)斜杠。总是同样的错误(不过,它会修改错误消息以表明它正在观察我指定的路径)。
如果我只是输出一个 json'ed getcwd() 它告诉我它正在 /app/public 目录中工作(我不知道这是否正常)。所以我也尝试使用“../Http/Resources/Views/OneTimeLink”路径,结果相同。毫无疑问,我搞砸了视图的放置位置,这是 Laravel 实际上不会费心检查的路径,但我无法确定它想在哪里找到这些视图。
是否有一种调试技术可以揭示它正在寻找的位置,或者有指定应该定位在哪里的文档?在 docker 容器内,artisan 声称 Laravel 7.30.4。
回答1
在 app/config
目录中,应该有一个“view.php”文件。这包括一个可能只包含一个条目的“路径”数组:
resource_path('views'),
根据注释默认包含标准位置,不需要添加。
resource_path() 函数也是一种尝试找出它可能在哪里寻找这些的好方法。我在返回的内容中包含了一个调试语句,并得到了以下 value:
/app/resources/temp
这条路径看起来有点奇怪,因为我希望所有重要的东西都在 /app/Http/resources 之类的路径中......我搞砸了我的 Dockerfile 并将其复制到 /app 中。所以一切都需要一个 /app/app 前缀,扔掉视图,天知道还有什么。