No último artigo nós falamos como você pode validar os campos de um formulário dentro do controller.
Para o exemplo do artigo anterior, validar dentro do controller é ok, pois o formulário tem poucos campos e não fica complexo de ler ou de ajustar as regras se necessário.
Mas as vezes a validação é bem mais complexa ou o seu formulário tem muitos campos, nesse caso, usar o Form Request faz bem mais sentido.
As Form Request são classes de requests personalizadas que encapsulam sua própria lógica de validação e autorização.
Ok, um pouco complexo, mas o exemplo abaixo vai ajudar a entender melhor.
Digamos que tenhamos essas regras de validação:
$validated = request()->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|max:80',
'mobile' => 'required|digits:11',
'address1' => 'required|email|max:80',
'postcode' => 'required|digits:11',
'state' => 'required|string|in:ES,RJ,SP,MG',
'street' => 'required|string|max:80',
'suburb' => 'required|string|max:80',
'apt_number' => 'string|numeric|required_if:house_number,null',
'house_number' => 'string|numeric|required_if:apt_number,null',
]);
Como você pode ver, são regras mais complexas que no exemplo anterior. Nesse caso, o controller talvez já não seja mais o lugar ideal para essa validação.
Vamos criar o nosso Form Request para armazenar essas regaras. Vamos utilizar o comando make:request
do artisan
para isso.
php artisan make:request StoreUserRequest
Agora, se você olhar na pasta App/Http/Requests
você vai ver a nossa nova classe que deve ser parecida com essa abaixo:
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreProjectRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return false;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [ ];
}
}
Ok, a primeira coisa que precisamos fazer, é mudar o return
do método authorize()
de false
para true
, esse método verifica se o usuário tem autorização para executar essa request
, mas não vamos trabalhar com isso agora, vamos apenas validar os campos do usuário.
O próximo passo então é colocar todas aquelas regras dentro do método rules()
.
<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class StoreUserRequest extends FormRequest
{
/**
* Determine if the user is authorized to make this request.
*
* @return bool
*/
public function authorize()
{
return true;
}
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
'name' => 'required|string|max:255',
'email' => 'required|email|max:80',
'mobile' => 'required|digits:11',
'address1' => 'required|email|max:80',
'postcode' => 'required|digits:11',
'state' => 'required|string|in:ES,RJ,SP,MG',
'street' => 'required|string|max:80',
'suburb' => 'required|string|max:80',
'apt_number' => 'string|numeric|required_if:house_number,null',
'house_number' => 'string|numeric|required_if:apt_number,null',
];
}
}
Ok, ja criamos o nosso Form Request, mas ele não começa a validar nossas requests magicamente sem fazermos nada.
Precisamos incluir a instancia dessa classe no nosso controller, mais especificamente no nosso método store()
.
<?php
namespace App\Http\Controllers;
use App\Htpp\Requests;
class UserController extends Controller
{
public function create()
{
return view('user.create');
}
// Registra o usuario no banco de dados
public function store(StoreUserRequest $request)
{
// Os valores dentro da request já estão validados nesse ponto
$validated_with_role = array_merge($request->validated(), ['role' => 'user']);
User::create($validated_with_role);
}
}
Service Container do Laravel toma conta de instanciar a classe e nos retornar esse objeto que resolvi chamar de $request
mas você pode chamar do jeito que você quiser.
Esse objeto inclui varias funções bem uteis. Mas à que estamos interessados agora é o método validated()
esse método retorna um array como todos os valores que passaram na validação do nosso Form Request.
Desse ponto, você já tem seus dados validados, e só precisamos incluir o role
ou qualquer outro campo necessário que não venha a partir do usuário.
Por fim, basta criar o novo usuário com o método User::create()
.
Deixe um comentário