地址的Laravel验证规则

地址的Laravel验证规则

问题描述:

In my project forms I request users to input addresses. Sometimes a single form can have 2 addresses. An address is always 3 fields (city, street and house number).

To validate I use an external service that returns either gps coordinates or an error, in which case I manually add an error to the validator. I even wrote a helper function so in my controllers it looks like this:

$this->validateAddress(
    $v,
    $request->input('firstaddr.city'),
    $request->input('firstaddr.street'),
    $request->input('firstaddr.house')
);
$this->validateAddress(
    $v,
    $request->input('secondaddr.city'),
    $request->input('secondaddr.street'),
    $request->input('secondaddr.house')
);

However this solution seems very hacky and repetitive, what I want is just to pass a rule to the validator, that will only receive a prefix, like "firstaddr" or "secondaddr". Is it possible to do it?

在我的项目表单中,我请求用户输入地址。 有时单个表单可以有2个地址。 地址总是3个字段(城市,街道和门牌号)。 p>

要验证我使用的是返回gps坐标或错误的外部服务,在这种情况下我手动添加错误 到验证器。 我甚至写了一个辅助函数,所以在我的控制器中看起来像这样: p>

  $ this-> validateAddress(
 $ v,
 $ request-> input(  'firstaddr.city'),
 $ request-> input('firstaddr.street'),
 $ request-> input('firstaddr.house')
); 
 $ this-> validateAddress  (
 $ v,
 $ request-> input('secondaddr.city'),
 $ request-> input('secondaddr.street'),
 $ request-> input('secondaddr。  house')
); 
  code>  pre> 
 
 

然而,这个解决方案似乎非常hacky和重复,我想要的只是将规则传递给验证器,只会收到 一个前缀,如“firstaddr”或“secondaddr”。 有可能吗? p> div>

Since Laravel 5.5 you can define custom validation rules.

In your controller it would look something like

$request->validate([
    'firstaddr' => [new Address],
    'secondaddr => [new Address]
]);

And you could combine that with a form request validation so that the validation logic happens before the execution enters the controller.