You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel Blade模板调用数据文件数组及语法差异问题

问题核心原因

你当前代码无法正常遍历输出,和引入文件的方式无关——控制器已经正确调用Data::getSkills()把数据传给视图了,dd()能正常输出就证明传值链路完全通顺,报错来自两个模板语法错误:

  • getSkills()返回的是普通PHP数组,不是对象实例,不能用->访问元素,必须用数组下标[]取值
  • Blade模板里混入了JSX语法(className属性、{变量}的输出写法),且@foreach循环块没有包裹实际要渲染的列表项,部分标签还存在未闭合问题。
@include/require/use 语法差异

三者适用场景完全不同,你之前尝试在Blade里用它们引入Data类文件全是场景错用:

  • @include:Blade模板引擎自带的视图引入指令,仅可用于引入resources/views目录下的其他Blade视图文件,接收的参数是视图的相对路径(支持斜杠或点分隔),不能用来加载PHP类文件。
  • require:PHP原生的文件加载语法,作用是按指定文件路径加载并执行PHP文件,Laravel已经配置了完整的类自动加载规则,带命名空间的类不需要手动require加载,在Blade里写原生require不仅违反MVC分层约定,还极易出现路径错误、重复加载的问题。
  • use:PHP原生的命名空间导入语法,必须写在PHP文件的头部(命名空间声明语句之后),不能直接写在Blade模板的渲染逻辑里导入类。如果确实要在模板里调用类,需要写完整的类命名空间,例如{{ \App\Data::getSkills() }},但不推荐在视图层直接调用业务类。
修正方案

你的Data.php和SkillsController代码逻辑完全正确,不需要修改,只需要修正Blade模板的语法即可:

@include('layouts.navbar')

<div id="competences">
    <div class="skills">
      <h1 class="skills-title"><span>*</span>Skills</h1>
      <h2 class="subtitle"><span>•</span> Languages and frameworks</h2>
      <ul class="skills-list">
        @foreach ($skills as $skill)
        <li class="skills-list-skill">
            <p>This is skill {{ $skill['name'] }}</p>
            {{-- 注意:当前Data类返回的数组只有name字段,需要先给数组项补充icon、title键值,再放开以下代码
            <img src="{{ $skill['icon'] }}" alt="" class="skills-list-skill-icon" />
            <p class="skills-list-skill-title">{{ $skill['title'] }}</p>
            --}}
        </li>
        @endforeach
      </ul>
    </div>
    <div class="secondary-skills"></div>
</div>
@include('layouts.footer')

如果后续要渲染技能图标、标题字段,只需要在Data.php的返回数组里给每个项补充对应的icon、title键值对即可。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 22:36:24