You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Laravel包开发:loadViewsFrom无法加载Blade视图,输出视图名而非内容

问题排查与解决方案

嘿,我来帮你看看这个问题——视图没渲染反而输出了downloads::test这个名称,通常是视图实例创建、路径配置或者服务注册环节出了问题,咱们一步步来排查:

1. 控制器里的View调用方式不对

你的控制器代码里写了return View('downloads::test' ,compact('test'));,但当前命名空间下没引入Laravel的View门面类,PHP根本不知道这个View是什么,自然没法正确创建视图实例。

解决办法二选一

  • 方法一:引入View门面,修改控制器代码
    在控制器顶部加一行use语句:
use Illuminate\Support\Facades\View;

然后把return语句改成:

return View::make('downloads::test', compact('test'));
  • 方法二:用更省心的view()助手函数
    直接替换return语句:
return view('downloads::test', compact('test'));

助手函数不需要额外引入类,Laravel会自动处理,新手用这个更不容易出错。

2. 视图文件的路径没对应上

你的服务提供者里设置了loadViewsFrom(__DIR__.'/resources/views/download', 'downloads');,这意味着:

  • 命名空间downloads对应的根目录是你的包目录/resources/views/download
  • 你调用的downloads::test对应的视图文件必须是你的包目录/resources/views/download/test.blade.php

检查这两点

  • 这个test.blade.php文件真的存在吗?
  • 文件名拼写对了吗?(Linux环境下大小写要严格匹配)

3. 服务提供者没在测试应用里注册

如果你的DownloadsServiceProvider没加到测试应用config/app.phpproviders数组里,Laravel根本不会加载你的视图命名空间,找不到视图就可能直接输出视图名称(取决于错误显示设置)。

解决办法
打开测试应用的config/app.php,在providers数组里添上你的服务提供者:

'providers' => [
    // ... 其他已有的服务提供者
    xxx\xxx\downloads\DownloadsServiceProvider::class,
],

记得把上面的命名空间换成你包的真实命名空间。

4. 路由代码可以简化(可选优化)

你现在的路由是手动实例化控制器,其实可以改成Laravel推荐的写法,避免手动传参可能出的问题:

Route::get('/downloads', [DownloadsController::class, 'index'])->name(self::DOWNLOADS_LISTER);

按照上面的步骤排查一遍,应该就能解决视图不渲染的问题了。

内容的提问来源于stack exchange,提问作者Bas

火山引擎 最新活动