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<?php
namespace App\Extend\Validators;
use Illuminate\Validation\Validator as IlluminateValidator;
class Mime extends IlluminateValidator
{
private $custom_messages = array( 'mime' => 'The mime-type of file ":attribute" is invalid',
);
public function __construct
($translator, $data, $rules, $messages = array(), $customAttributes = array()) {
parent::__construct($translator, $data, $rules, $messages, $customAttributes);
$this->setCustomMessages($this->custom_messages);
}
public function validateMime($attribute, $value, $parameters) {
$isValid = false;
$fileMime = $value->getClientMimeType();
foreach($parameters as $param) {
$mime = $this->getMimesType($param);
if ($fileMime == $mime) {
$isValid = true;
break;
}
}else {
$isValid = true;
break;
}
}
}
return $isValid;
}
private function getMimesType($type) {
$mime = '';
switch($type) {
case 'bmp':
$mime = ['image/bmp','image/x-windows-bmp'];
break;
case 'gif':
$mime = 'image/gif';
break;
case 'jpg':
case 'jpeg':
$mime = ['image/jpeg','image/pjpeg'];
break;
case 'png':
$mime = 'image/png';
break;
case 'doc':
case 'dot':
$mime = 'application/msword';
break;
case 'docx':
$mime = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';
break;
case 'dotx':
$mime = 'application/vnd.openxmlformats-officedocument.wordprocessingml.template';
break;
case 'xls':
case 'xlt':
case 'xla':
$mime = 'application/vnd.ms-excel';
break;
case 'xlsx':
$mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';
break;
case 'xltx':
$mime = 'application/vnd.openxmlformats-officedocument.spreadsheetml.template';
case 'ppt':
case 'pot':
case 'pps':
case 'ppa':
$mime = 'application/vnd.ms-powerpoint';
break;
case 'pptx':
$mime = 'application/vnd.openxmlformats-officedocument.presentationml.presentation';
break;
case 'potx':
$mime = 'application/vnd.openxmlformats-officedocument.presentationml.template';
break;
case 'ppsx':
$mime = 'application/vnd.openxmlformats-officedocument.presentationml.slideshow';
break;
case 'pdf':
$mime = 'application/pdf';
break;
}
return $mime;
}
}
El validador anterior lo agrego desde un provider
Código PHP:
Ver original<?php
namespace App\Providers;
use Validator;
use App\Extend\Validators\Mime;
use App\Extend\Validators\
Time; use Illuminate\Support\ServiceProvider;
class MimeValidateServiceProvider extends ServiceProvider
{
public function boot() {
Validator::resolver(function($translator, $data, $rules, $messages) {
return new Mime($translator, $data, $rules, $messages);
});
}
public function register()
{
}
}
Y el provider lo agrego desde app.php
Código PHP:
Ver original/*
* Application Service Providers...
*/
'App\Providers\AppServiceProvider',
'App\Providers\BusServiceProvider',
'App\Providers\ConfigServiceProvider',
'App\Providers\EventServiceProvider',
'App\Providers\RouteServiceProvider',
'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