Partilhar campos entre os formulários de criação e edição em Laravel
Esta é simples.
Nas tuas aplicações, é provável que tenhas recursos que são criados e editados com formulários. Os formulários de criação e edição são basicamente os mesmos (com os campos a serem exactamente iguais), mas funcionam de uma maneira ligeiramente diferente.
Na vista de criação começas com um formulário vazio, enquanto que na vista de edição começas com o formulário preenchido com os dados actuais. Mas, em ambas as vistas, queres o conteúdo introduzido anteriormente, no caso de a validação falhar e sere redireccionado para o formulário.
Portanto, se quiseres escrever os campos apenas uma vez e depois incluí-los em ambas as vistas, essa é uma maneira relativamente limpa de o fazer:
<input type="text" name="email" value="{{ old('email', $user->email ?? null) }}">
Se o campo indicado no primeiro parâmetro não estiver definido, a função auxiliar old () devolve null ou o valor passado como o segundo parâmetro. Usando uma expressão com o null coalescing operator como segundo parâmetro dá-nos a capacidade de continuar a devolver null se nenhum dos valores anteriores estiver definido.
Isto funciona como esperado em ambas as vistas. Na vista de criação, o $user->email não estaria definido e null seria devolvido (e o campo ficaria vazio), na vista de edição $user->e-mail estaria definido e seria devolvido. Excepto se existir conteúdo submetido e que falhou na validação, nesse caso esse conteúdo é devolvido (em ambas as vistas).
Também pode ser escrito desta maneira, com o mesmo resultado:
<input type="text" name="email" value="{{ old('email') ?? $user->email ?? null }}">