Laravel动态创建功能

时间:2017-07-21 17:06:33

标签: laravel function dynamic

我有一个ServiceProvider:

 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\CustomValidator@fullnameFailValidate');
        Validator::extend('lastname_fail', 'App\Services\CustomValidator@lastnameFailValidate');
        Validator::extend('hotel_fail', 'App\Services\CustomValidator@hotelFailValidate');
        Validator::extend('city_fail', 'App\Services\CustomValidator@cityFailValidate');
   }

}

我有一个模特游客,它有这样的属性:名字,姓氏,酒店,城市。并且可以添加一些其他(许多)属性。

(我知道如何从Tourist模型中获取所有字段名称:$ array = Schema :: getColumnListing('tourist');)

所以我的问题是如何动态创建:

  

验证::延伸( '的 fieldname_fail ',   “应用\服务\的CustomValidator @的字段名 FailValidator')

在boot()方法中?

我尝试使用magic _call方法,但没有成功......

任何帮助表示感谢!:)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你需要这样的东西。

  1. 迭代表字段(模型属性);
  2. 为每个字段(模型属性)扩展验证器。
  3. 这是一个代码示例:

    foreach (Schema::getColumnListing('tourists') as $attribute) {
        Validator::extend("{$attribute}_fail", "App\Services\CustomValidator@{$attribute}FailValidator");
    }