【问题标题】:Laravel dynamically creating functionsLaravel 动态创建函数
【发布时间】:2017-07-22 02:04:13
【问题描述】:

我有一个服务提供者:

 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,它具有以下属性:名字、姓氏、酒店、城市。并且可以添加一些其他(许多)属性。

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

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

Validator::extend('fieldname_fail', "App\Services\CustomValidator@fieldnameFailValidator')

在 boot() 方法中?

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

任何帮助表示赞赏!:)

【问题讨论】:

  • 我可以通过网络闻到这个!这么多的魔法很糟糕,当你在 30 天后回来时,你将不知道这部分应用程序是如何工作的。

标签: laravel function dynamic


【解决方案1】:

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

  1. 遍历表字段(模型属性);
  2. 为每个字段(模型属性)扩展验证器。

这是一个代码示例:

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

【讨论】:

  • 你太棒了!它是如此简单,以至于我觉得自己没有弄清楚。
  • 你犯了一个错误:“${$attribute}_fail”应该是“{$attribute}_fail”,而“${$attribute}FailValidator”应该是“{$attribute}FailValidator”。请更正您的答案,我接受它为“正确”:)
猜你喜欢
  • 2019-02-09
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多