vista variable switch plantillas pasar loop controlador laravel laravel-4 laravel-5 blade templating

variable - switch laravel



Cómo hacer eco de un valor predeterminado si el valor no está establecido (4)

Me gustaría saber cuál sería la mejor manera de mostrar un valor predeterminado si el valor dado no está establecido. Tengo lo siguiente en un archivo blade (no puedo garantizar que la clave esté configurada, depende de una multitud de factores).

{{ $foo[''bar''] }}

Sabría si la siguiente es la mejor manera de hacerlo,

{{ (isset($foo[''bar'']) ? $foo[''bar''] : ''baz'' }}

o hay una mejor manera de hacer esto?

Gracias :)


Con Laravel 4.1+ puedes simplemente hacerlo así:

{{ $Variable or "Default Message" }}

Es exactamente lo mismo que:

echo isset($Variable) ? $Variable : ''Default Message'';

Editar: en una nota lateral, arriba es compatible con PHP 7+, usando ??

echo $Variable ?? ''Default Message'';


La sintaxis de acceso directo ternario de PHP 5.3 funciona en las plantillas de Blade:

{{ $foo->bar ?: ''baz'' }}

No funcionará con variables indefinidas de nivel superior, pero es excelente para manejar valores perdidos en matrices y objetos.


Mientras que la respuesta de Chris B es perfectamente válida; Sentí que quizás esta es una pregunta que puede tener una respuesta alternativa. Algunos preferirían no "engordar" sus controladores y, en este caso, al menos, el uso de un presentador podría ser la respuesta que busca para permitir una gran flexibilidad en las vistas de sus aplicaciones.

Eche un vistazo al siguiente project/package en Github. El archivo léame es bastante robusto con una cantidad de ejemplos para que pueda comenzar.

Te permitirá hacer exactamente lo que pediste y simplemente llamar

{{ $foo[''bar''] }}

en tu opinión.


Recomiendo establecer el valor predeterminado en su controlador en lugar de hacer una pausa en su vista.

Esta es la mejor manera porque mantiene la lógica fuera de su vista y mantiene limpio el marcado de la vista.

Por ejemplo, en su controlador, antes de pasar datos a la vista:

if(!isset($foo[''bar''])){ $foo[''bar''] = ''baz''; }