Recomendaria você criar uma classe para salvar o conteúdo e deixar o controller realmente só controlando, mas para simplificar irei fazer conforme seu exemplo.
Sugestões de melhoria:
-
Controle no DB: Caso ocorra algum problema durante a manipulação das imagens ou salvamento você pode precisar fazer o banco voltar ao estado inicial, uma
transaction
fará você manter a coesão do bancomutilizando orollback
para desfazer tudo. Utilize isso sempre que um registro pode afetar outro e a ação depende do ciclo completo. (Nesse seu caso não precisaria necessáriamente, mas para controlar melhor a mensageria eu preferi por) -
Preenchimento dos dados: Seu
$request->validated()
já contem um array com os dados, abuse dele. Note que eu utilizei o método$model->fill()
para isso e o dado que não contem ali eu passo manualmente para realmente saber que sai do padrão da request, que é acionada por outra parte do fonte (método privado para salvar a imagem). -
Trate os erros: caso de erro seu front deve exibir uma mensagem amigável também. Não esqueça de usar o
old()
no blade para repopular os inputs já digitados para diminuir a frustração do usuário.
Segue fonte refatorado:
public function store(CreateAssociadoRequest $request)
{
try{
DB::begginTransaction();
$perfilAssociado = new PerfilAssociado();
$perfilAssociado->fill($request->validated());
$perfilAssociado->setAttribute('logo', $this->uploadImage($request, 'logo'));
$perfilAssociado->save();
DB::commit();
}catch(Exception $e){
DB::rollback();
return redirect()->back()->with('fail', 'Falha ao cadastrar o perfil!');
}
return redirect()->back()->with('success', 'Perfil cadastrado com sucesso!');
}
Lembrando que é só minha opnião e uma sugestão. Espero que essas dicas deixei seu fonte com uma leitura mais fluída ou seja útil de alguma forma. Qualquer dúvida estou a disposição