[PHP][Laravel] Attributen bij een custom validatie regel

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • patricks8
  • Registratie: September 2010
  • Laatst online: 08-10 23:01
Mijn vraag

Ik heb een custom validatie regel moeten maken omdat de aanwezige Laravel validatie regels niet voldeden aan de behoefte. Bij deze validatie regel maak ik gebruik van parameters. Dit zijn andere velden in mijn formulier. Nu wil ik het label tonen wat bij deze velden hoort in het bericht, iets wat ik normaal doe door de attributes mee te geven aan de validator. Voor de standaard Laravel validatie regels gaat dit goed. Bijvoorbeeld 'Beschrijving is verplicht als Naam niet ingevuld is.' Alleen bij mijn custom validatie regel gaat dit niet op. Dan krijg ik bijvoorbeeld 'Beschrijving is verplicht als product_name niet ingevuld is.'. product_name is in dit geval een parameter voor de validatie van het veld Beschrijving.

Heeft iemand een idee hoe ik in een custom validatie regel de ingestelde attributen ophaal in de Validator::replacer() methode?

Wat ik nu doe is namelijk het volgende. Let op! dit is niet de volledige validatie regel.

PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// De validatie regel
public function validateCustomRule ($attribute, $value, $parameters, $validator)
 {
        $data = $validator->getData();  
        foreach($parameters as $parameter) {
             if(!empty($data[$parameter])) {
                  return false;
             }
        }
        
        return true;
 }

// Vervang de parameters in het bericht
Validator::replacer('custom_validation_rule', function($message, $attribute, $rule, $parameters) {
            return str_replace([':parameters'], implode(' / ', $parameters), $message);
        });


Relevante software en hardware die ik gebruik

Laravel 5.2

PSN: Skippy0810 | iRacing Profiel

Alle reacties


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 09-10 15:13

TheNephilim

Wtfuzzle

In de documentatie (https://laravel.com/docs/...n#custom-validation-rules) lees ik het volgende:
You will also need to define an error message for your custom rule. You can do so either using an inline custom message array or by adding an entry in the validation language file. This message should be placed in the first level of the array, not within the custom array, which is only for attribute-specific error messages.
Je kunt dus ook een entry toevoegen aan de 'validation language file'.

Wat betreft je huidige code:

code:
1
2
3
Validator::replacer('foo', function($message, $attribute, $rule, $parameters) {
    dd($attribute);
});


Dump and die eens je variabelen om te zien wat er precies in zit. Heb je dit trouwens wel in de boot method van je AppServiceProvider staan?

Acties:
  • 0 Henk 'm!

  • patricks8
  • Registratie: September 2010
  • Laatst online: 08-10 23:01
TheNephilim schreef op vrijdag 5 mei 2017 @ 09:48:
In de documentatie (https://laravel.com/docs/...n#custom-validation-rules) lees ik het volgende:


[...]


Je kunt dus ook een entry toevoegen aan de 'validation language file'.

Wat betreft je huidige code:

code:
1
2
3
Validator::replacer('foo', function($message, $attribute, $rule, $parameters) {
    dd($attribute);
});


Dump and die eens je variabelen om te zien wat er precies in zit. Heb je dit trouwens wel in de boot method van je AppServiceProvider staan?
Wat ik terug krijg als ik dump and die is het volgende:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
// Het bericht waarin attribute al vervangen is
$message = 'Foo is verplicht als :parameters niet ingevuld is';

// Veldnaam voor de validatie
$attribute = 'foo';

// Validatie regel zoals aangeroepen in de Validator
$rule = 'custom_validation_rule';

// Parameters die vervangen moeten worden
$parameters = [
     'parameter1'
];


Hier heb ik dus nog niet zoveel aan.

Ik de validatie methode heb ik in de boot methode van een custom Service provider staan, omdat ik meerdere custom validatie regels heb die ik daar definieer. Alleen deze hebben andere parameters waarvan ik geen veldnaam hoef te tonen. En dus niet dit probleem ben tegen gekomen.

In de methode validateCustomRule, kan ik wel bij deze attributen van de parameters komen. Alleen ik moet ze dus hebben in de Validator::replacer() methode.

Het bericht komt trouwens al uit de validation language file. Ik moet alleen nog :parameters vervangen met de juiste gegevens.

PSN: Skippy0810 | iRacing Profiel


Acties:
  • 0 Henk 'm!

  • TheNephilim
  • Registratie: September 2005
  • Laatst online: 09-10 15:13

TheNephilim

Wtfuzzle

Nou ik snap er niks van :+ Je kunt :parameters toch gewoon replacen met de waarden van $parameters als die je terugkrijgt, zoals je zegt in laatste voorbeeld.

Acties:
  • 0 Henk 'm!

  • patricks8
  • Registratie: September 2010
  • Laatst online: 08-10 23:01
TheNephilim schreef op vrijdag 5 mei 2017 @ 10:39:
Nou ik snap er niks van :+ Je kunt :parameters toch gewoon replacen met de waarden van $parameters als die je terugkrijgt, zoals je zegt in laatste voorbeeld.
Dat is wat ik doe. Alleen krijg ik hierin 'parameter1' terug omdat dat die heb opgegeven. 'parameter1' is hierin de naam van de input. Als label heb ik bijvoorbeeld 'Parameter één'.
Dit heb ik ook toegevoegd aan de attributen van de Validator zodat als veld 'parameter1' gevalideerd wordt in de eventuele foutmelding 'Parameter één' staat in plaats van 'parameter1'. Nou wil ik dus ook dat ik 'Parameter één' te zien krijg in mijn bericht van mijn custom validatie regel en niet 'parameter1'. Snap je het nog?

De vraag is dus hoe kom ik bij de attributen van de Validator in de Validator::replacer() methode om de juiste naam van de meegegeven parameters weer te geven.

PSN: Skippy0810 | iRacing Profiel