Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
BaraoVlask opened this issue Nov 22, 2022 · 0 comments
Open

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

BaraoVlask opened this issue Nov 22, 2022 · 0 comments

Comments

@BaraoVlask
Copy link

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant