Skip to content

Latest commit

 

History

History
422 lines (274 loc) · 13.9 KB

File metadata and controls

422 lines (274 loc) · 13.9 KB

Validation

Uso básico

Laravel vem com uma simples, conveniente facilidade para validar dados e retornar mensagens de erro de validação através da classe Validation.

Exemplo básico de validação

$validator = Validator::make(
	array('name' => 'Dayle'),
	array('name' => 'required|min:5')
);

O primeiro argumento passado para o método make são os dados a serem validados. O segundo argumento é a regra de validação que deverá ser aplicada a estes dados.

Várias regras podem ser delimitadas utilizando ou o caracter "pipe", ou um array de elementos separados.

Utilizando arrays para especificar regras

$validator = Validator::make(
	array('name' => 'Dayle'),
	array('name' => array('required', 'min:5'))
);

Uma vez que a instância do Validator foi criada, o método fails (ou passes) pode ser usado para realizar a validação.

if ($validator->fails())
{
	// The given data did not pass validation
}

Se a validação falhar, você pode recuperar as mensagens de erro do validador.

$messages = $validator->messages();

Validando arquivos

A classe Validator fornece várias regras para validar arquivos, como 'tamanho', 'mimes' e outros. Ao validar arquivos, você pode simplesmente passá-los para o validador com os outros dados.

Trabalhando com mensagens de erro

Após chamar o método messages na instância do Validator, você irá receber uma instância da classe MessageBag, que tem uma variedade de métodos para trabalhar com mensagens de erros.

Recuperando a primeira mensagem de erro de um campo

echo $messages->first('email');

Recuperando todas as mensagens de erros de um campo

foreach ($messages->get('email') as $message)
{
	//
}

Recuperando todas mensagens de erros de todos os campos

foreach ($messages->all() as $message)
{
	//
}

Verificando se uma mensagem de um campo existe

if ($messages->has('email'))
{
	//
}

Recuperando uma mensagem de erro com formatação

echo $messages->first('email', '<p>:message</p>');

Nota: Por padrão, mensagens são formatadas utilizando a sintaxe compatível com o Bootstrap.

Recuperando todas as mensagens de erros com formatação

foreach ($messages->all('<li>:message</li>') as $message)
{
	//
}

Mensagens de erros & Views

Assim que você realizar a validação, você irá precisar de uma maneira fácil de passar as mensagens de erros para suas views. Isto é convenientemente tratado pelo Laravel. Considere as seguintes rotas como exemplo:

Route::get('register', function()
{
	return View::make('user.register');
});

Route::post('register', function()
{
	$rules = array(...);

	$validator = Validator::make(Input::all(), $rules);

	if ($validator->fails())
	{
		return Redirect::to('register')->withErrors($validator);
	}
});

Observe que quando a validação falha, nós passamos a instância Validator para o método Redirect utilizando o método withErrors. This method will flash the error messages to the session so that they are available on the next request.

However, notice that we do not have to explicitly bind the error messages to the view in our GET route. This is because Laravel will always check for errors in the session data, and automatically bind them to the view if they are available. So, it is important to note that an $errors variable will always be available in all of your views, on every request, allowing you to conveniently assume the $errors variable is always defined and can be safely used. The $errors variable will be an instance of MessageBag.

So, after redirection, you may utilize the automatically bound $errors variable in your view:

<?php echo $errors->first('email'); ?>

Regras de validação disponíves

Abaixo está a lista de todas as regras de validação disponíves e suas funções:

accepted

O campo sob validação deve ser yes, on, ou 1. Útil para validação de aceitação de "Termos de Serviço".

active_url

O campo sob validação deve ser uma URL válida de acordo com a função checkdnsrr do PHP.

after:date

O campo sob validação deve ser um valor depois de uma determinada data. As datas serão passadas para a função strtotime do PHP.

alpha

O campo sob validação deve ser inteiramente formado por caracteres do alfabeto.

alpha_dash

O campo sob validação pode ter caracteres alfa-numéricos, bem como traços e underscores.

alpha_num

O campo sob validação deve ser inteiramente formado por caracteres alfa-numéricos.

before:date

O campo sob validação deve ser um valor que antecede uma determinada data. As datas serão passadas para a função strtotime do PHP.

between:min,max

O campo sob validação deve ter um tamanho entre min e max. Strings, numéricos, e arquivos são validados da mesma forma como a regra size.

confirmed

The field under validation must have a matching field of foo_confirmation. For example, if the field under validation is password, a matching password_confirmation field must be present in the input.

date

O campo sob validação deve ser uma data válida de acordo com a função strtotime do PHP.

date_format:format

The field under validation must match the format defined according to the date_parse_from_format PHP function.

different:field

O campo field deve ser diferente do campo sob validação.

email

O campo sob validação deve ser formatado como um endereço de e-mail.

exists:table,column

O campo sob validação deve existir em um determinado banco de dados.

Uso básico da regra

'state' => 'exists:states'

Especificando um nome de coluna

'state' => 'exists:states,abbreviation'

image

O campo sob validação deve ser uma imagem (jpeg, png, bmp, ou gif)

in:foo,bar,...

O campo sob validação deve estar incluso na lista de valores dada.

integer

O campo sob validação deve ser um valor inteiro.

ip

O campo sob validação deve ser formatado como um endereço de IP.

max:value

The field under validation must be less than a maximum value. Strings, numéricos, e arquivos são validados da mesma forma como a regra size.

mimes:foo,bar,...

O campo sob validação deve ter um tipo MIME que corresponde a uma das extensões listadas.

Uso básico

'photo' => 'mimes:jpeg,bmp,png'

min:value

O campo sob validação deve ter um value minímo. Strings, numéricos, e arquivos são validados da mesma forma como a regra size.

not_in:foo,bar,...

O campo sob validação não deve estar incluso na lista de valores dada.

numeric

O campo sob validação deve ter um valor numérico.

regex:pattern

O campo sob validação deve corresponder à determinada expressão regular.

Nota: Ao usar o padrão regex, poderá ser necessário especificar as regras em um array ao invés de utilizar o delimitador pipe, especialmente se a expressão regular contém um caracter pipe.

required

O campo sob validação deve estar presente nos dados de entrada.

required_with:foo,bar,...

sThe field under validation must be present only if the other specified fields are present.

same:field

O campo field deve coincidir com o campo sob validação.

size:value

The field under validation must have a size matching the given value. For string data, value corresponds to the number of characters. For numeric data, value corresponds to a given integer value. For files, size corresponds to the file size in kilobytes.

unique:table,column,except,idColumn

The field under validation must be unique on a given database table. If the column option is not specified, the field name will be used.

Uso básico

'email' => 'unique:users'

Especificando uma coluna

'email' => 'unique:users,email_address'

Forcing A Unique Rule To Ignore A Given ID

'email' => 'unique:users,email_address,10'

url

O campo sob validação deve ser formatada como uma URL.

Custom Error Messages

If needed, you may use custom error messages for validation instead of the defaults. There are several ways to specify custom messages.

Passing Custom Messages Into Validator

$messages = array(
	'required' => 'The :attribute field is required.',
);

$validator = Validator::make($input, $rules, $messages);

Note: The :attribute place-holder will be replaced by the actual name of the field under validation. You may also utilize other place-holders in validation messages.

Other Validation Place-Holders

$messages = array(
	'same'    => 'The :attribute and :other must match.',
	'size'    => 'The :attribute must be exactly :size.',
	'between' => 'The :attribute must be between :min - :max.',
	'in'      => 'The :attribute must be one of the following types: :values',
);

Sometimes you may wish to specify a custom error messages only for a specific field:

Specifying A Custom Message For A Given Attribute

$messages = array(
	'email.required' => 'We need to know your e-mail address!',
);

In some cases, you may wish to specify your custom messages in a language file instead of passing them directly to the Validator. To do so, add your messages to custom array in the app/lang/xx/validation.php language file.

Specifying Custom Messages In Language Files

'custom' => array(
	'email' => array(
		'required' => 'We need to know your e-mail address!',
	),
),

Regras de validação personalizadas

Laravel provides a variety of helpful validation rules; however, you may wish to specify some of your own. One method of registering custom validation rules is using the Validator::extend method:

Registering A Custom Validation Rule

Validator::extend('foo', function($attribute, $value, $parameters)
{
	return $value == 'foo';
});

Note: The name of the rule passed to the extend method must be "snake cased".

The custom validator Closure receives three arguments: the name of the $attribute being validated, the $value of the attribute, and an array of $parameters passed to the rule.

Note that you will also need to define an error message for your custom rules. You can do so either using an inline custom message array or by adding an entry in the validation language file.

Instead of using Closure callbacks to extend the Validator, you may also extend the Validator class itself. To do so, write a Validator class that extends Illuminate\Validation\Validator. You may add validation methods to the class by prefixing them with validate:

Extendendo a classe de validação

<?php

class CustomValidator extends Illuminate\Validation\Validator {

	public function validateFoo($attribute, $value, $parameters)
	{
		return $value == 'foo';
	}

}

Após, você precisar registrar sua extensão do validador personalizada:

Registering A Custom Validator Resolver

Validator::resolver(function($translator, $data, $rules, $messages)
{
	return new CustomValidator($translator, $data, $rules, $messages);
});

When creating a custom validation rule, you may sometimes need to define custom place-holder replacements for error messages. You may do so by creating a custom Validator as described above, and adding a replaceXXX function to the validator.

protected function replaceFoo($message, $attribute, $rule, $parameters)
{
	return str_replace(':foo', $parameters[0], $message);
}