Skip to content

[DISCUSSÃO] Sugestão de melhoria #134

Open
@BaraoVlask

Description

@BaraoVlask

Sugiro a refatoração do aquivo ValidatorProvider para ond ele extenda as validações já existentes no laravel sem substituir a resolução da validação (código citado), fazendo isso tambem seria nescessario refetorar as rules, abaixo segue exemplo.

$this->app['validator']
->resolver(
function ($translator, $data, $rules, $messages, $attributes) use ($me, $validatorFormats) {
$messages += $me->getMessages();
return new Validator($translator, $validatorFormats, $data, $rules, $messages, $attributes);
}
);

Exemplo de provider

use App\Rules\Base64ImageRule;
use App\Rules\CheckBilletDueDateRule;
use App\Rules\CheckBilletPaymentRule;
use App\Rules\CheckCreditCardInstallmentsRule;
use App\Rules\CheckInstallmentsRule;
use App\Rules\EnumRule;
use Illuminate\Support\ServiceProvider;
use Validator;

class ValidationServiceProvider extends ServiceProvider
{
    protected array $rules = [
        'enum' => EnumRule::class,
        'base64_image' => Base64ImageRule::class,
        'check_installments' => CheckInstallmentsRule::class,
        'billet_value_paid' => CheckBilletPaymentRule::class,
        'billet_due_date' => CheckBilletDueDateRule::class,
        'check_installments_count' => CheckCreditCardInstallmentsRule::class,
    ];

    /**
     * @return void
     */
    public function boot(): void
    {
        $this->registerValidationRules();
    }

    /**
     * @return void
     */
    private function registerValidationRules(): void
    {
        foreach ($this->rules as $alias => $class) {
            if (is_string($alias)) {
                Validator::extend($alias, "$class@passes");
            }
        }
    }
}

Este exemplo tirei de um projeto que fiz

Prós

  • Maior compatibilidade com as versoes do Laravel (pelo menos do meu ponto de vista)
  • Suporte a customização dos attibutes
  • Suporte a customização das mensagens por arquivos de tradução
  • Resolução da issue Substituição de mensagens de erro #133

Contras

  • Trabalho para refatorar (posso ajudar)
  • Possivel perda de retrocompatibilidade (brakingchange)
  • Possiveis erros/problemas que eu ainda não encontrei

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions