2017-07-21 4 views
0

Ich habe einen Serviceprovider:Laravel dynamische Erstellung Funktionen

namespace App\Providers; 

    use Illuminate\Support\ServiceProvider; 

    use \Validator; 

    use App\Services\CustomValidator; 


    class AppServiceProvider extends ServiceProvider 
    { 
     public function boot() { 
     Validator::extend('firstname_fail', 'App\Services\[email protected]'); 
     Validator::extend('lastname_fail', 'App\Services\[email protected]'); 
     Validator::extend('hotel_fail', 'App\Services\[email protected]'); 
     Validator::extend('city_fail', 'App\Services\[email protected]'); 
    } 

}

Ich habe ein Modell Touristen, die solche Attribute: Vornamen, Nachnamen, Hotel, Stadt. Und es können einige andere (viele) Attribute hinzugefügt werden.

(Ich weiß, wie alle Feldnamen aus Touristen Modell zu erhalten: $ array = Schema :: getColumnListing ('Touristen');)

Also meine Frage ist, wie man eine dynamische Erstellung von machen:

Validator :: erweitern ('fieldname_fail', „App \ Services \ CustomValidator @Feldname FailValidator ')

innerhalb der boot() -Methode?

Ich habe versucht, Magie _call Methode zu verwenden, aber nicht gelang ...

Jede geschätzt Hilfe! :)

+0

Das kann ich riechen über das Netzwerk! So viel Magie ist einfach schlecht, wenn du nach 30 Tagen zurückkommst, wirst du keine Ahnung haben, wie dieser Teil der App funktioniert. – Kyslik

Antwort

1

Wenn ich das richtig verstanden, benötigen Sie so etwas wie dieses.

  1. Iterate über Tabellenfelder (Modellattribute);
  2. Validator für jedes Feld (Modellattribut) erweitern. Hier

ist ein Codebeispiel:

foreach (Schema::getColumnListing('tourists') as $attribute) { 
    Validator::extend("{$attribute}_fail", "App\Services\[email protected]{$attribute}FailValidator"); 
} 
+0

du bist großartig! Es ist so einfach, dass ich fühle, dass ich es nicht herausgefunden habe. –

+0

Sie haben jedoch einen Fehler gemacht: "$ {$ attribute} _fail" shuold be "{$ attribute} _fail" und "$ {$ attribute} FailValidator" sollte "{$ attribute} FailValidator" sein. Bitte korrigieren Sie Ihre Antwort und ich akzeptiere sie als "richtig" :) –

+0

Sie haben Recht! Erledigt) – tooleks