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

Laravel Blade模板:如何在@yield参数中组合字符串与控制器变量

解决Laravel Blade中@yield参数拼接固定字符串与变量的问题

嘿,我完全懂你想在Laravel Blade的@yield指令里,把固定字符串和控制器传递的变量组合起来作为区块名称的需求——这个场景在做动态页面布局时特别常见,我来给你分享正确的实现方法:

核心实现思路

Blade允许在指令参数中直接使用PHP表达式,所以你可以直接把固定字符串和变量拼接后作为@yield的参数,不需要额外的复杂操作。

具体代码示例

1. 控制器传递变量

首先在你的控制器方法里,把需要用到的变量传递给视图:

// 比如在PageController.php中
public function dynamicPage($slug)
{
    // 传递变量$pageSlug到视图
    return view('dynamic-page', ['pageSlug' => $slug]);
}

2. 父模板中使用拼接后的@yield参数

在你的布局模板(比如layouts/main.blade.php)里,直接拼接固定字符串和变量作为@yield的区块名称:

<!DOCTYPE html>
<html>
<head>
    <!-- 拼接固定前缀"page-title-"和变量$pageSlug作为区块名 -->
    <title>@yield('page-title-' . $pageSlug)</title>
</head>
<body>
    <div class="container">
        <!-- 同理拼接内容区块的名称 -->
        @yield('page-content-' . $pageSlug)
    </div>
</body>
</html>

3. 子模板中对应定义@section

在子模板(比如dynamic-page.blade.php)里,要使用和父模板完全一致的拼接方式来定义对应的区块:

@extends('layouts.main')

@section('page-title-' . $pageSlug)
    {{ ucfirst($pageSlug) }} - 我的网站
@endsection

@section('page-content-' . $pageSlug)
    <h1>{{ ucfirst($pageSlug) }}页面内容</h1>
    <p>这是动态生成的{{ $pageSlug }}页面内容</p>
@endsection

避免报错的小技巧

如果担心变量可能不存在导致拼接出无效的区块名称,可以使用PHP的空合并运算符来设置默认值:

// 如果$pageSlug不存在,就使用"default"作为后缀
@yield('page-title-' . ($pageSlug ?? 'default'))

这样就算控制器没传递变量,也不会出现类似page-title-这种空后缀的无效区块名,避免潜在的报错或渲染问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:05:32