Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

400
Visualizações
Dar nombre a la regla de validación personalizada - Laravel 8

Laravel 8 permite crear reglas de validación personalizadas:https://laravel.com/docs/8.x/validation#custom-validation-rules

php artisan make:rule Euro

Pero luego debe pasar la regla como un objeto (en lugar de una cadena):

new Euro

en lugar de la notación de cadena regular

'required|euro'

¿Hay alguna forma de "registrar" las nuevas clases de reglas en un identificador de cadena y usarlas como si fueran reglas preexistentes?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

Puede utilizar la función extend en el validador. Probablemente algo como:

 Validator::extend('euro', new Euro());

Este código debe estar en su AppServiceProvider.

over 4 years ago · Santiago Trujillo Relatório

0

Puedes hacerlo de la siguiente manera.

Cree dos métodos adicionales en su regla, además de los predeterminados ( passes() , message() ):

  • handle() -- Este devolverá el identificador de cadena de su regla. Su único propósito es realizar un seguimiento de ese identificador en un solo lugar.
  • validate() - Ese es el que será invocado por el validador. Básicamente, esto debería ser solo un pase a passes() para que pueda mantener su lógica de validación en un solo lugar. Además, debe pasar el mensaje al validador. En la mayoría de los casos, también desea mantener la lógica del mensaje en un solo lugar.
 use Illuminate\Validation\Validator; public static function handle(): string { return 'euro'; } public function validate(string $attribute, $value, $params, Validator $validator): bool { $handle = $this->handle(); $validator->setCustomMessages([ $handle => $this->message(), ]); return $this->passes($attribute, $value); }

Registre su clase utilizando la fachada del Validador o la fábrica en el método boot() de un proveedor de servicios:

 namespace App\Providers; use App\Rules\Euro; use Illuminate\Contracts\Validation\Factory as ValidatorFactory; use Illuminate\Support\ServiceProvider; class ValidationServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { // } /** * Bootstrap services. * * @return void */ public function boot(ValidatorFactory $validator) { $validator->extend(Euro::handle(), Euro::class); } }

Eso es todo. No olvide registrar su proveedor de servicios si creó uno dedicado.

over 4 years ago · Santiago Trujillo Relatório

0

Esta solución funciona para mí.

php artisan make:rule NoLink

Aplicación\Reglas\NoLink.php

 <?php namespace App\Rules; use Illuminate\Contracts\Validation\Rule; use Illuminate\Validation\Validator; class NoLink implements Rule { // ... public function message() { return __('validation.' . self::handle()); } public static function handle(): string { return 'no_link'; } public function validate(string $attribute, $value, $params, Validator $validator): bool { $handle = $this->handle(); $validator->setCustomMessages([ $handle => $this->message(), ]); return $this->passes($attribute, $value); } }

App\Proveedores\AppServiceProvider.php

 public function boot() { // ... Validator::extend(NoLink::handle(), NoLink::class); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda