> Faqs > Cómo detectar si un slot está vacío en un componente Blade

Cómo detectar si un slot está vacío en un componente Blade

Hola. Estoy desarrollando un componente blade, de los que les llaman x-components.

El caso es que necesito saber si un slot que me llega está vacío, hago lo siguiente:

@if(isset($slot))
    <div class="contenido">{{ $slot }}</div>
@endif

Pero la división de clase "contenido" siempre se muestra. Tampoco lo consigo con @if($slot)... siempre me da que existe el slot. ¿Cómo se debe actuar?

Respuestas

El tema es que $slot siempre existe en un componente. Aunque esté vacío $slot es una instancia de una clase. En concreto de la clase Illuminate\Support\HtmlString. Por ello las alternativas que intentas no te funcionan.

Para saber si la instancia de Illuminate\Support\HtmlString tiene algún contenido debes usar el método isNotEmpty() sobre $slot.

El código sería el siguiente:

@if($slot->isNotEmpty())
  <div class="contenido">{{ $slot }}</div>
@endif

Es verdad que no resulta demasiado intuitivo si esperas que $slot sea un simple string. Pero es fácil de solucionar en tus componentes blade.

Puedes comprobar que es un objeto Illuminate\Support\HtmlString haciendo esto en el código del componente:

{{ var_dump($slot) }}
Miguel Angel
3160 141 210 17
Gracias Miguel, muy amable como siempre!! :)