Aviso: a diretiva @or foi retirada da versão 5.7 do Laravel. Ao invés de usar o @or, é possível usar o operador ?? (Null Coalesce), que foi introduzido no PHP 7.
Eu costumava usar a função isset
para verificar se uma collection – ou qualquer outro tipo de variável – tinha sido instanciada. Por exemplo:
{{ ( isset( $nome ) ) ? $nome : 'Nome não informado' }}
Este código é mais curto do que escrever um bloco padrão de if/else:
@if(isset($nome))
{{$nome}}
@else
Nome não informado
@endif
Você sabia que pode deixar esse código ainda mais limpo? Basta usar o comando or do blade o operador ?? (Null Coalesce):
// Não funciona mais
{{$name or 'Nome não definido'}}
// Use este código
{{$name ?? 'Nome não definido'}}
Resumo desta dica em vídeo
A diretiva @OR funciona para objetos?
O operador “??” funciona para objetos?
Sim. Esta dúvida foi levantada em um fórum de Laravel e achei interessante compartilhar aqui também.
Como o Null Coalesce é um operador nativo do PHP 7, funciona perfeitamente para objetos e seus atributos.
Rota:
Route::get('/teste', function () {
$obj = new stdClass();
$obj->a = 'Letra a';
$obj->b = null;
return view('teste',['obj' => $obj]);
});
View:
A: {{$obj->a ?? 'A não definido'}}
<br>
B: {{$obj->b ?? 'B não definido'}}
Encadear o operador Null Coalesce
Você pode fazer múltiplas verificações na mesma linha:
/**
* Neste exemplo, o form post name é exibido.
* Se ele não existir, * verificamos o form post email. Se nenhum
* deles estiver definido, exibimos uma mensagem
*/
echo $_POST['name'] ?? $_POST['email'] ?? 'Nome e e-Mail não definidos';