2017-07-21 85 views
0

我有一個的ServiceProvider:Laravel動態創建功能

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]date'); 
    } 

}

我有一個模型旅遊,其中有這樣的屬性:名字,姓氏,酒店,城市。並且可以添加一些其他(很多)屬性。

(我知道如何從旅遊模型中的所有字段名稱:$陣列=架構:: getColumnListing(「旅遊者」);)

所以我的問題是如何使動態創建的:

驗證::延伸( 'fieldname_fail', 「應用程序\服務\的CustomValidator @字段名 FailValidator')

裏面的boot()方法?

我試圖用魔法_call的方法,但沒有成功......

感謝任何幫助!:)

+0

我可以聞到這個在網絡上!如此多的魔力就是不好的,當你在30天后回來時,你將不知道這部分應用程序是如何工作的。 – Kyslik

回答

1

如果我理解正確的話,你需要這樣的事情。

  1. 對錶格字段(模型屬性)進行迭代;
  2. 爲每個字段(模型屬性)擴展驗證程序。

這裏是一個代碼示例:

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

你太棒了!這是如此簡單,我覺得沒有搞清楚。 –

+0

你犯了一個錯誤:「$ {$ attribute} _fail」shuold be「{$ attribute} _fail」 和「$ {$ attribute} FailValidator」應該是「{$ attribute} FailValidator」。請更正你的答案,我接受它爲「正確」:) –

+0

你是對的!完成) – tooleks