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) }}