2016-07-29 38 views
0

Ich komme aus einem Codeigniter Hintergrund (ich weiß ein bisschen überfällig) und ich habe kleines Problem beim Erstellen von benutzerdefinierten Formular Validierungsregeln in Laravel 5.2. Viele der Tutorials, die ich überprüfte, schlugen vor, dies in der Routendatei zu tun und eine Anfragedatei usw. einzurichten, aber ich bin immer noch verwirrt.Laravel 5 benutzerdefinierte Form Validierung

Mein Bedarf ist sehr einfach.

Ich habe Produktkategorien, die Unterkategorien haben. Für jede Produktkategorie muss eine Standardunterkategorie vorhanden sein. Also beim Erstellen von Unterkategorien habe ich ein Häkchen gefragt, ob diese Unterkategorie die Standardkategorie ist.

Ich brauche den Formularvalidator, um während der Formularvalidierung im Unterkategorie-Erstellungsprozess false auszulösen, wenn eine bereits erstellte Unterkategorie als Standardunterkategorie für diese Kategorie ausgewählt wurde.

Unten ist der Teil meines Codes, der den Formularvalidierungsabschnitt enthält.

$attributeNames = array(
     'category_id' => 'UOM Category Name', 
     'sub_category_name' => 'Sub Category Name', 
     'is_default' => 'Default' 
    ); 

    $validator = Validator::make($request->all(), [ 
     'category_id' => 'required', 
     'sub_category_name' => 'required|unique:sub_categories,sub_category_name', 
     'is_default' => 'required', //POSSIBLE TRIGGER GOES HERE. In CI the a custom function name went here 
    ]); 
    $validator->setAttributeNames($attributeNames); 
    if ($validator->fails()) { 
     $response = new Response(); 
     return $response->setStatusCode(400, $validator->errors()); 
    } else { 
     //proceed with store 
    } 

Sorry über schlechtes Englisch. Auch habe ich gesehen, dass die Formularvalidierung auf einem FormRequest durchgeführt wird. Ist diese Best Practice?

+0

Nur um zu klären, fragen Sie, wie Sie die neue Unterkategorie als Standard für eine Kategorie bereits validiert validieren können? Nur eine Standardunterkategorie pro Hauptkategorie? Wenn beispielsweise Unterkategorie1 bereits für Hauptkategorie1 voreingestellt ist, aber für die neue Unterkategorie2 'is_default' angekreuzt ist, soll sie fehlschlagen? – Winter

+0

Hallo, Ja das ist genau mein Szenario –

Antwort

0

Ja, form requests existieren dafür. Sie können einen neuen FormRequest mit dem php artisan make:request CreateSubCategoryRequest Befehl erstellen, fügen Sie dann Ihre rules:

/** 
* Get the validation rules that apply to the request. 
* 
* @return array 
*/ 
public function rules() 
{ 
    return [ 
     'category_id' => 'required|exists:categories,id', // If you're making sure the parent category ID exists 
     'sub_category_name' => 'required|unique:sub_categories,sub_category_name', 
     'is_default' => 'required|boolean' 
    ]; 
} 

Für Ihre Standardunter Validierung, glaube ich, was Sie fragen, wie Sie bestätigen können, wenn die übergeordnete Kategorie bereits eine Standard-Untergruppe hat (erlaubt nur 1 Standardunterkategorie pro Hauptkategorie). In diesem Fall sollten Sie ein Feld default_subcategory_id Ihrem Hauptkategoriedatensatz statt jeder Unterkategorie selbst zuweisen. Fügen Sie dann eine Beziehung zum Hauptkategorienmodell für die Standardunterkategorie hinzu und prüfen Sie, ob es null ist.

0

Wie immer die Laravel docs sind Ihr bester Freund https://laravel.com/docs/5.2/validation#validation-quickstart

Sie haben mehrere Möglichkeiten, wie und wo Sie Ihre Anfrage zu bestätigen. Best Practice hängt von Ihrem Anwendungsfall ab.

Allerdings war für mich am meisten das Erstellen eines Anforderungstyps für eine bestimmte Entität das Beste. Sie können den Befehl artisan verwenden, um eine neue Anforderung zu erstellen.

Sie finden die Datei in app/Http/Requests. Sie haben einen Regel funktionieren, wo Sie können Ihre Regeln fügen Sie

return [ 
    'category' => 'required|min:5' 
]; 

Um eine benutzerdefinierte Regel zu erstellen, validieren müssen Sie dies in Ihrem AppServiceProvider.php setzen können

public function boot() 
{ 
    // custom rule 
    Validator::extend('foo', function($attribute, $value, $parameters, $validator) { 
     return $value == 'foo'; 
    }); 
} 

Individuelle Validierungsregeln: https://laravel.com/docs/5.2/validation#custom-validation-rules

Verwandte Themen