Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

[Laravel 5] Implementar validaciones propias para FormRequest

Estas en el tema de [Laravel 5] Implementar validaciones propias para FormRequest en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Que tal compañeros, vengo a ustedes solicitando su ayuda, verán, estoy en un proyecto donde se manejan datos muy especificos que deben ser validados, el ...
  #1 (permalink)  
Antiguo 26/06/2015, 12:27
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años
Puntos: 406
[Laravel 5] Implementar validaciones propias para FormRequest

Que tal compañeros, vengo a ustedes solicitando su ayuda, verán, estoy en un proyecto donde se manejan datos muy especificos que deben ser validados, el problema es que como son varios los formularios que manejan dichos datos eh pensado que lo mejor es crear un validador a media para cada tipo de dato, hasta aquí no hay problema, ya los tengo hechos y funcionan, el problema es que el framework no me permite usar mas de 1, si agrego mas de 1 comienza a enviar errores, seguramente la implementación no es la correcta, así que vengo a solicitar su ayuda para ver como implementar las validaciones de manera correcta, hasta aquí es lo que tengo:

Validar MIMEs especificos
Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace App\Extend\Validators;
  4.  
  5. use Illuminate\Validation\Validator as IlluminateValidator;
  6.  
  7. class Mime extends IlluminateValidator
  8. {
  9.     private $custom_messages = array(
  10.         'mime' => 'The mime-type of file ":attribute" is invalid',
  11.     );
  12.  
  13.     public function __construct($translator, $data, $rules, $messages = array(), $customAttributes = array())
  14.     {
  15.         parent::__construct($translator, $data, $rules, $messages, $customAttributes);
  16.         $this->setCustomMessages($this->custom_messages);
  17.     }
  18.  
  19.     public function validateMime($attribute, $value, $parameters) {
  20.         $isValid = false;
  21.         $fileMime = $value->getClientMimeType();
  22.  
  23.         foreach($parameters as $param) {
  24.             $mime = $this->getMimesType($param);
  25.  
  26.             if (!is_array($mime)) {
  27.                 if ($fileMime == $mime) {
  28.                     $isValid = true;
  29.                     break;
  30.                 }
  31.             }else {
  32.                 if (!in_array($fileMime, $mime)) {
  33.                     $isValid = true;
  34.                     break;
  35.                 }
  36.             }
  37.         }
  38.  
  39.         return $isValid;
  40.     }
  41.  
  42.     private function getMimesType($type) {
  43.         $mime = '';
  44.         switch($type) {
  45.             case 'bmp':
  46.                 $mime = ['image/bmp','image/x-windows-bmp'];
  47.                 break;
  48.             case 'gif':
  49.                 $mime = 'image/gif';
  50.                 break;
  51.             case 'jpg':
  52.             case 'jpeg':
  53.                 $mime = ['image/jpeg','image/pjpeg'];
  54.                 break;
  55.             case 'png':
  56.                 $mime = 'image/png';
  57.                 break;
  58.             case 'doc':
  59.             case 'dot':
  60.                 $mime = 'application/msword';
  61.                 break;
  62.             case 'docx':
  63.                 $mime = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
  64.                 break;
  65.             case 'dotx':
  66.                 $mime = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template';
  67.                 break;
  68.             case 'xls':
  69.             case 'xlt':
  70.             case 'xla':
  71.                 $mime = 'application/vnd.ms-excel';
  72.                 break;
  73.             case 'xlsx':
  74.                 $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
  75.                 break;
  76.             case 'xltx':
  77.                 $mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.template';
  78.             case 'ppt':
  79.             case 'pot':
  80.             case 'pps':
  81.             case 'ppa':
  82.                 $mime = 'application/vnd.ms-powerpoint';
  83.                 break;
  84.             case 'pptx':
  85.                 $mime = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
  86.                 break;
  87.             case 'potx':
  88.                 $mime = 'application/vnd.openxmlformats-officedocument.presentationml.template';
  89.                 break;
  90.             case 'ppsx':
  91.                 $mime = 'application/vnd.openxmlformats-officedocument.presentationml.slideshow';
  92.                 break;
  93.             case 'pdf':
  94.                 $mime = 'application/pdf';
  95.                 break;
  96.         }
  97.  
  98.         return $mime;
  99.     }
  100. }

El validador anterior lo agrego desde un provider
Código PHP:
Ver original
  1. <?php
  2.  
  3. namespace App\Providers;
  4.  
  5. use Validator;
  6.  
  7. use App\Extend\Validators\Mime;
  8. use App\Extend\Validators\Time;
  9. use Illuminate\Support\ServiceProvider;
  10.  
  11. class MimeValidateServiceProvider extends ServiceProvider
  12. {
  13.     public function boot() {
  14.         Validator::resolver(function($translator, $data, $rules, $messages) {
  15.             return new Mime($translator, $data, $rules, $messages);
  16.         });
  17.     }
  18.  
  19.     public function register()
  20.     {
  21.     }
  22. }

Y el provider lo agrego desde app.php
Código PHP:
Ver original
  1. /*
  2.          * Application Service Providers...
  3.          */
  4.         'App\Providers\AppServiceProvider',
  5.         'App\Providers\BusServiceProvider',
  6.         'App\Providers\ConfigServiceProvider',
  7.         'App\Providers\EventServiceProvider',
  8.         'App\Providers\RouteServiceProvider',
  9.         'App\Providers\MimeValidateServiceProvider',

El punto es que si agrego un nuevo validador siguiendo los mismos pasos da conflicto indicando por ejemplo:

Method [validateMime] does not exist.

Agradezco toda ayuda que me puedan proporcionar
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)

Etiquetas: framework, implementar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:45.