Intento imprimir una imagen cargada por el usuario en Laravel 5.4. Utilizo una condición if y si el usuario no carga ninguna imagen, se muestra la imagen predeterminada, pero mi código fuente de alguna manera no imprime nada. Este es el código que uso:
@if (File::exists($post->image)) { echo "<img src="{{ asset('uploads/' . $post->image) }}" alt="{{ $post->title }}" />"; } else { echo "<img src="{{ asset('images/no-image.png') }}" alt="{{ $post->title }}" />"; } @endifActualizar:
Trato de usar este código:
@if (File::exists(public_path("asset/uploads/".$post->image))) <img src="{{ asset('uploads/' . $post->image) }}" alt="{{ $post->title }}" /> @else <img src="{{ asset('images/no-image.png') }}" alt="{{ $post->title }}" /> @endifY el resultado ahora estoy obteniendo:
si utilizo asset/uploads O assets/uploads if todas las imágenes vuelven a no tener imagen, incluso si tienen una imagen. si utilizo uploads if las publicaciones con imágenes se muestran pero otras no muestran imágenes y la URL que obtendré para ellas es url.dev/uploads en lugar de url.dev/images/no-image.png .
File::exists() comprobará la ubicación física del archivo en el disco duro. Por lo tanto, debe usar la ruta real al archivo.
@if (File::exists(public_path("assets/uploads/".$post->image))) <img src="{{ asset('uploads/' . $post->image) }}" alt="{{ $post->title }}" /> @else <img src="{{ asset('images/no-image.png') }}" alt="{{ $post->title }}" /> @endifVerifique que la ruta generada por el método `public_path' sea correcta para su archivo.
Actualización: gracias a linktoahref, resulta que el código de su hoja también es incorrecto. Corregido aquí.
File::exists funciona igual que file_exists de php, que devolverá verdadero incluso si busca un directorio, ahora lo que sucede aquí es que para algunas publicaciones, la imagen es nula, lo que hace que la ruta sea un directorio.
Utilice este código en su lugar.
@if ($post->image && File::exists(public_path("uploads/".$post->image))) <img src="{{ asset('uploads/' . $post->image) }}" alt="{{ $post->title }}" /> @else <img src="{{ asset('images/no-image.png') }}" alt="{{ $post->title }}" /> @endifEstás mezclando php sin procesar y plantillas de blade juntas, ya sea que te quedes con el código de php sin procesar o la sintaxis de plantillas de blade
Entonces seria lo siguiente en blade
@if (File::exists($post->image)) <img src="{{ asset('uploads/' . $post->image) }}" alt="{{ $post->title }}" /> @else <img src="{{ asset('images/no-image.png') }}" alt="{{ $post->title }}" /> @endifO use php sin procesar como
<?php if (File::exists($post->image)) { echo "<img src=". asset('uploads/' . $post->image) . " alt=" . $post->title . " />"; } else { echo "<img src=". asset('images/no-image.png') . " alt=". $post->title ." />"; } ?>