如何在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
相关产品推荐
相关产品推荐

