【问题标题】:Livewire 2.2: Undefined variable slot in app.blade.phpLivewire 2.2:app.blade.php 中未定义的变量槽
【发布时间】:2021-01-13 04:51:33
【问题描述】:

我在我的 laravel 项目中使用 livewire 2.2 和 laravel 7.24。当我使用加载组件时

Route::get('/path', ComponentClassPath);

它可以工作,但是当我在刀片视图中加载我的 livewire 组件时。例如,像这样的 test.blade.php:

@extends('layouts.app')

@section('content')
    @livewire("my-livewire-component")
@endsection

它不起作用并显示以下错误:

未定义变量:槽(查看: E:\xampp\htdocs\lw\resources\views\layouts\app.blade.php)。

app.blade.php

<head>
   @livewireStyles
</head>
<body>
   <div class="container">
       {{ $slot }}
   </div>

   @livewireScripts
</body>

有什么办法吗?

【问题讨论】:

  • 你也可以分享你的ComponentClassPath

标签: php laravel laravel-livewire


【解决方案1】:

由于您使用的是@section 指令(您在其中@extend 是一个布局,并使用部分),而不是组件$slot 方法(请参阅https://laravel.com/docs/8.x/blade#slots),因此您应该改用@yield呼应“特殊”$slot 变量。

或者,您可以使用插槽方法,但您通常会选择其中一种。采用这种方法意味着刀片文件的结构不同,这两种方法都没有任何问题——只要在选择哪一个方面保持一致即可。

要继续使用部分和扩展布局,只需将{{ $slot }} 替换为@yield('content'),例如

<div class="container">
    @yield('content')
</div>

【讨论】:

  • 我按照他们同时使用的视频教程进行操作。我认为这是在版本 1.x 中。对吗?
  • 如果我用 yield('content') 替换 $slot,错误就会消失,并且刀片文件会很好地呈现。但问题是livewire(不是blade)直接渲染的组件里面什么都没有,只是空的。
  • @MUHAMMADSiyab 我也是
猜你喜欢
  • 2021-08-11
  • 2022-11-11
  • 2021-09-18
  • 2023-01-14
  • 1970-01-01
  • 2021-04-19
  • 2021-03-26
  • 2021-04-15
  • 2022-08-19
相关资源
最近更新 更多