【问题标题】:Laravel custom validation - get parametersLaravel 自定义验证 - 获取参数
【发布时间】:2015-07-29 13:39:04
【问题描述】:

我要获取验证规则中传入的参数。

对于我创建的某些验证规则,我能够从验证规则中获取参数,但对于少数规则,它无法获取参数。

在模型中我使用以下代码:

public static $rules_sponsor_event_check = array(
    'sponsor_id' => 'required',
    'event_id' => 'required|event_sponsor:sponsor_id'
);

在 ValidatorServiceProvider 中,我使用以下代码:

    Validator::extend('event_sponsor', function ($attribute, $value, $parameters) {
        $sponsor_id = Input::get($parameters[0]);
        $event_sponsor = EventSponsor::whereIdAndEventId($sponsor_id, $value)->count();

        if ($event_sponsor == 0) {
            return false;
        } else {
            return true;
        }
    });

但在这里我无法使用以下方法获取赞助商 ID:

$sponsor_id = Input::get($parameters[0]);

【问题讨论】:

  • 尝试dd($parameters[0])检查参数是否传递正确。
  • dd($parameters[0]) 正在显示 - “sponsor_id”

标签: php laravel validation


【解决方案1】:

http://laravel.com/docs/5.0/validation#custom-validation-rules

自定义验证器闭包接收三个参数: $attribute 被验证,属性的 $value 和一个数组 传递给规则的 $parameters。

那为什么是Input::get( $parameters );?你应该检查 $parameters 的内容。

编辑。 好的,我知道您要做什么。如果您尝试获取的值没有被提交,您将不会从输入中读取任何内容。来看看

dd(Input::all());

你会发现

sponsor_id=Input::get($parameters[0]);

在提交了赞助商 ID 的地方工作。

【讨论】:

  • 参数包含另一个输入参数的名称。 OP 想要获得它的价值。
  • $input = Input::get($parameters);dd($input);正在抛出异常 - Arr.php 第 219 行中的 ErrorException:isset 中的非法偏移类型或空
  • 对于 dd(Input::all());正在显示一个空数组。我也试过给参数传递一个像这样的虚拟值 - 'event_id' => 'required|event_sponsor:123' 并且它也显示一个空数组。
  • 输入将读取提交给您的请求的内容。这就是 Input 所做的
  • 感谢您的快速回复。我在控制器中有这样的代码,我将值分配给 $input 变量并传递给验证器 - $input = array(); $user = $auth->toUser(); $input['event_id'] = $eventId;//事件验证的事件id $input['sponsor_id'] = $sponsorId; //赞助商验证的事件ID $input['organizer_id'] = $user->id; $validator = Validator::make($input, EventSponsor::$rules_sponsor_event_check);
【解决方案2】:

作为第四个,整个验证器被传递给您使用extends 定义的闭包。您可以使用它来获取所有经过验证的数据:

Validator::extend('event_sponsor', function ($attribute, $value, $parameters, $validator) {
    $sponsor_id = array_get($validator->getData(), $parameters[0], null);
    // ...
});

顺便说一句,如果传递的输入名称不存在,我在这里使用array_get 以避免任何错误。

【讨论】:

  • 我使用如下,但它返回 null - $sponsor_id = array_get($validator->getData(), $parameters[0], null); dd($sponsor_id); - 我是否需要将 $validator 传递给以下 - $validator = Validator::make($input, EventSponsor::$rules_sponsor_event_check);
  • 请检查$validator->getData()实际返回的内容
  • @lukasgeiter 如何在验证消息中设置/访问“:other”?
猜你喜欢
  • 2016-01-29
  • 2016-12-23
  • 2018-07-29
  • 2012-11-27
  • 2015-09-11
  • 2016-10-25
  • 2018-08-21
  • 2019-07-02
  • 1970-01-01
相关资源
最近更新 更多