Laravel - É possível melhorar esse código?

Estou achando muito repetitivo o código abaixo:

$pac = new Paciente();

if($request->input('encaminhar')==1)
{
	$regras = [
		'nome'=>'required',
		'nascimento'=>'required',
		'status'=>'required',
		'tipoAtendimento'=>'required',
		'sexo'=>'required',
		'responsavel'=>'required',
		'contato'=>'required',
		'encaminhamentoInterno'=>'required'

	];
	$mensagens = [
		'required'=>':attribute não pode ser em branco!',
	];
	$request->validate($regras,$mensagens);
}
else if($request->input('encaminhamentoInterno')==2)
{
	$regras = [
		'nome'=>'required',
		'nascimento'=>'required',
		'status'=>'required',
		'tipoAtendimento'=>'required',
		'sexo'=>'required',
		'responsavel'=>'required',
		'contato'=>'required',
		'psiInst'=>'required'
	];
	$mensagens = [
		'required'=>':attribute não pode ser em branco!',
	];
	$request->validate($regras,$mensagens);
}       
if($request->input('encaminhamentoInterno')==1)
{
	$regras = [
		'nome'=>'required',
		'nascimento'=>'required',
		'status'=>'required',
		'tipoAtendimento'=>'required',
		'sexo'=>'required',
		'responsavel'=>'required',
		'contato'=>'required',
		'colaborador'=>'required'
	];
	$mensagens = [
		'required'=>':attribute não pode ser em branco!',
	];
	$request->validate($regras,$mensagens);
} 
else
{
	$regras = [
		'nome'=>'required',
		'nascimento'=>'required',
		'status'=>'required',
		'tipoAtendimento'=>'required',
		'sexo'=>'required',
		'responsavel'=>'required',
		'contato'=>'required',
		'encaminhar'=>'required'
	];
	$mensagens = [
		'required'=>':attribute não pode ser em branco!',
	];
	$request->validate($regras,$mensagens);
}
1 curtida

Um código mais enxuto e lógico sem repetição é você construir o array de regras consequentemente determinado pelas regras imposta por você e que se repete em todas isolar no código como demostrado logo abaixo:

$pac = new Paciente();

$regras = [
	'nome'=>'required',
	'nascimento'=>'required',
	'status'=>'required',
	'tipoAtendimento'=>'required',
	'sexo'=>'required',
	'responsavel'=>'required',
	'contato'=>'required',
];

if($request->input('encaminhar') == 1) 
{ 
	$regras['encaminhamentoInterno'] = 'required';
} 
else if($request->input('encaminhamentoInterno') == 2)
{
	$regras['psiInst'] = 'required';
}
else if ($request->input('encaminhamentoInterno') == 1)
{
	$regras['colaborador'] = 'required';	
}
else
{
	$regras['encaminhar'] = 'required';	
}
$mensagens = [
	'required' => ':attribute não pode ser em branco!'
];
$request->validate($regras,$mensagens);

Além do mais isso pode ser feito em uma classe Form Request que isola também esse código para um outra classe e nela você pode tomar as mesmas decisões e obrigações do código,exemplo link documentação, sendo isso o mais ideal porque cada classe tem uma responsabilidade efetiva no código, isso além de ser um proposito da POO também ajuda e muito em manutenções.

1 curtida

obrigado pelas dicas. :slight_smile:

1 curtida

Se a resposta resolveu, marca ela como solução. Vlw!