Laravel Blade视图间变量传递失败,求助排查问题原因
Hey there! Let’s figure out why your variable isn’t making it from frontendbasic.blade.php to head.blade.php—I’ve run into this exact issue more times than I can count, so let’s break down the most common fixes step by step.
1. You’re Not Passing Variables Correctly in @include
The #1 mistake here is forgetting to explicitly attach the variable when calling @include. Blade won’t automatically pass all parent view variables to included views—you have to define them directly in the include statement.
Correct syntax in /resources/views/layouts/frontendbasic.blade.php:
<!DOCTYPE html> <html> <head> <!-- Pass the variable to the included head view --> @include('common.head', ['pageTitle' => $pageTitle]) </head> <body> <!-- Rest of your layout content --> </body> </html>
Then in /resources/views/common/head.blade.php, use the variable (add a fallback with ?? to avoid errors if the variable is missing):
<meta charset="UTF-8"> <title>{{ $pageTitle ?? 'Default Frontend Title' }}</title> <!-- Other head elements like CSS, meta tags -->
2. The Parent View Doesn’t Have Access to the Variable
Even if you pass the variable in @include, it won’t work if frontendbasic.blade.php doesn’t have the variable in its own scope. Double-check your controller to make sure you’re passing the variable to the layout view:
Example controller code:
public function showFrontendPage() { // Pass the variable to the layout view return view('layouts.frontendbasic', [ 'pageTitle' => 'My Awesome Frontend Page' ]); }
3. You’re Confusing @include with @yield/@section
Since you mentioned referencing questions about @yield, it’s easy to mix up how these directives work. @yield is for defining sections that child views can fill in, not for passing dynamic variables directly.
If you were using @yield instead of @include, the setup would look like this (better for static sections, not dynamic variables):
- In
frontendbasic.blade.php:<title>@yield('pageTitle', 'Default Title')</title> - In a child view extending
frontendbasic:@extends('layouts.frontendbasic') @section('pageTitle', 'Custom Page Title')
But since you’re including a separate head.blade.php, sticking with @include with explicit variable passing is the right approach.
4. Blade View Cache is Causing Stale Code
Sometimes Blade caches compiled views, so your recent changes might not take effect. Clear the view cache with this Artisan command:
php artisan view:clear
Quick Checks to Rule Out Simple Mistakes
- Variable name typos: Blade is case-sensitive—make sure
$pageTitlein the parent matches$pageTitlein the included view (no$page_titlevs$pageTitlemix-ups). - Variable order: Ensure you’re defining or passing the variable before calling
@includeinfrontendbasic.blade.php. If you define it after the include, it won’t be available.
Give these steps a try, and your variable should start passing correctly in no time!
内容的提问来源于stack exchange,提问作者LucyTurtle

