php - paginacion - Validador personalizado en Laravel 5
paginacion laravel (2)
Pruebe lo siguiente:
- Haga una clase de vinculación donde pueda implementar cada regla que quiera extender la clase
Validator
. - Haga un proveedor de servicios que extienda
ServiceProvider
. - Agregue su proveedor de validador personalizado en el archivo
config/app.php
.
Puede crear el enlace en la carpeta Services
esta manera:
namespace MyApp/Services;
class Validator extends /Illuminate/Validation/Validator{
public function validateFoo($attribute, $value, $parameters){
return $value == "foo"
}
}
Luego, use un proveedor de servicios para extender el núcleo:
namespace MyApp/Providers;
use MyApp/Services/Validator;
use Illuminate/Support/ServiceProvider;
class ValidatorServiceProvider extends ServiceProvider{
public function boot()
{
/Validator::resolver(function($translator, $data, $rules, $messages)
{
return new Validator($translator, $data, $rules, $messages);
});
}
public function register()
{
}
}
Finalmente, importe su proveedor de servicios en config/app.php
manera:
''providers'' => [
...
...
''MyApp/Providers/ValidatorServiceProvider'';
]
Estoy actualizando mi aplicación Laravel de 4 a 5. Sin embargo, tengo un validador personalizado que no puedo ponerme a trabajar.
En L4, hice un archivo validators.php y lo incluí en global.php usando require app_path().''/validators.php'';
.
Intenté hacer lo mismo en L5. Solté un validador en la aplicación / Validators / Validators.php y actualicé mi composer.json .
"files": [
"app/Validators/Validators.php"
]
Sin embargo, ahora no se renderiza nada en ninguna página. ¿Qué he hecho mal?
así que esto es lo que hice al agregar una validación personalizada. esto es para laravel 5.1
- Ejecute
PHP Artisan make:request MyFormValidationRequest
archivoPHP Artisan make:request MyFormValidationRequest
se crea en laapp/Requests/MyFormValidationRequest.php
Aquí está el código inicial:
<?php
namespace App/Http/Requests;
use App/Http/Requests/Request;
class MyFormValidationRequest extends Request
{
/**
* 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 [
//
];
}
}
IMPORTANTE : Cambie el valor de retorno del método authorize()
a verdadero, si no está haciendo ninguna autenticación. su valor inicial es falso. de lo contrario, obtienes una página blanca con un mensaje de error "Prohibido".
Agregué una regla bajo las
rules()
funciónrules()
, esto es lo que parecepublic function rules() { return [ ''activeuntil'' => ''today_onwards'' ]; }
today_onwards
es mi nueva validación.
Creé una carpeta llamada ''Servicios'' en la carpeta de la aplicación
Creé un archivo llamado ''ValidatorExtended.php'' en la carpeta App / Services, aquí está el código siguiente:
<?php namespace App/Services; use Illuminate/Validation/Validator; use Carbon/Carbon; class ValidatorExtended extends Validator { private $_custom_messages = array( "today_onwards" => "The :attribute must be today onwards", ); public function __construct( $translator, $data, $rules, $messages = array(), $customAttributes = array() ) { parent::__construct( $translator, $data, $rules, $messages, $customAttributes ); $this->_set_custom_stuff(); } protected function _set_custom_stuff() { //setup our custom error messages $this->setCustomMessages( $this->_custom_messages ); } protected function validateTodayOnwards( $attribute, $value ) { $now = strtotime(''-1 day''); $valueDateFormat = strtotime($value); if($valueDateFormat > $now){ return true; } else { return false; } } }
Nota: el método validateTodayOnwards es donde pones tu lógica. el nombre del método siempre debe comenzar en "validar" y luego el nombre de su nueva clave de validación, que debe estar en el título del caso,
Otra nota: su clave de validación debe estar separada por un guión bajo y letras pequeñas, en este caso, "hoy_en adelante". el guión bajo debe colocarse antes de todas las primeras letras mayúsculas en el nombre del método. Espero haberlo explicado bien.
El método TodayOnwards es equivalente al nombre de validación de "today_onwards",
otro ejemplo, si creé validateOldPassword, tu clave de validación debería ser "old_password".
app/Providers/AppServiceProvider.php
código siguiente en laapp/Providers/AppServiceProvider.php
dentroboot()
métodoboot()
.Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array()) { return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes); });
No olvide agregar la siguiente biblioteca, una es la clase Validator y la otra es su propia clase, que es el "
ValidatorExtended
".use App/Services/ValidatorExtended; use Illuminate/Support/Facades/Validator;
Así es como se ve todo el archivo, [
app/Providers/AppServiceProvider.php
]<?php namespace App/Providers; use Illuminate/Support/ServiceProvider; use App/Services/ValidatorExtended; use Illuminate/Support/Facades/Validator; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // Validator::resolver(function($translator, $data, $rules, $messages = array(), $customAttributes = array()) { return new ValidatorExtended($translator, $data, $rules, $messages, $customAttributes); }); } /** * Register any application services. * * @return void */ public function register() { // } }
Eso es. hecho. usted creó su propia validación personalizada.
Además, si desea usarlo en su controlador, a continuación se muestra el código:
class testController extends Controller { public function updatePass(MiscValidation $request){ //code here } }
En lugar de utilizar Request Class, utiliza su propia clase, que es una extensión de la clase Request.