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

如何在Laravel的asset()助手方法中插值@yield()返回值?

在Laravel的asset()中使用@yield内容的解决方法

方法1:拆分输出,避免Blade指令嵌套

把asset()的输出和@yield分开写,不让Blade指令嵌套在{{ }}的PHP代码块内:

<!-- guest.blade.php -->
<html>
   <head>
      <title>{{ config('app.name', 'Laravel') }} - @yield('title')</title>
      <link rel="stylesheet" href="{{ asset('css/') }}{{ @yield('view-asset') }}.css">
   </head>
   <body>
      @yield('content')
   </body>
</html>

子模板里直接给section赋值字符串(比如对应登录页的样式文件名):

<!-- login.blade.php -->
@extends('layouts.guest')

@section('title', 'Login-page')
@section('view-asset', 'login')

@section('content')
   ...
@endsection

方法2:使用Blade底层的yieldContent方法

如果要在asset()内部直接拼接,可以用Blade引擎的yieldContent方法获取section内容,这个方法支持在PHP代码块中调用:

<!-- guest.blade.php -->
<html>
   <head>
      <title>{{ config('app.name', 'Laravel') }} - @yield('title')</title>
      <link rel="stylesheet" href="{{ asset('css/' . $__env->yieldContent('view-asset') . '.css') }}">
   </head>
   <body>
      @yield('content')
   </body>
</html>

子模板写法和方法1一致,用字符串形式给view-assetsection赋值即可。

方法3:先存变量再使用(支持空值处理)

通过PHP代码块把section内容存为变量,还能顺便处理空值,避免生成无效的CSS路径:

<!-- guest.blade.php -->
<html>
   <head>
      <title>{{ config('app.name', 'Laravel') }} - @yield('title')</title>
      @php
          $viewAsset = trim($__env->yieldContent('view-asset'));
          // 空值时使用默认样式文件
          $cssPath = $viewAsset ? "css/{$viewAsset}.css" : "css/default.css";
      @endphp
      <link rel="stylesheet" href="{{ asset($cssPath) }}">
   </head>
   <body>
      @yield('content')
   </body>
</html>

原写法报错原因

@yield是Blade的输出指令,会被编译成PHP的echo语句;而{{ }}本身也是Blade的输出语法(等价于echo htmlspecialchars(...))。把@yield放进{{ }}里,相当于在PHP代码中嵌套了echo,直接导致语法错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 03:24:27