2017-08-11 97 views
0

我遇到了这样的问题。 我想要做的是为用户数据的验证规则制作1个地方。这些数据由患者,地址和其他对象组成。 所以我创建的规则:PHP Laravel验证数据密钥名称

protected function validationRules() 
{ 
    return [ 
     'Patient.firstName' => 'required|string|min:2', 
     'Patient.lastName'  => 'required|string', 
     'Patient.sex'  => 'required|string', 
     'Address.city'  => 'required|string', 
     'Address.states'  => 'required|string', 
     'Address.address1'  => 'required|string|min:2', 
     'Address.zip'  => 'required|string|min:2', 
     'Phone.mobileArea'  => 'string|min:3|required_with:Phone.mobilePhone', 
     'Phone.mobilePhone'  => 'string|min:7|required_with:Phone.mobileArea', 
     'Phone.homePhone'  => 'string|min:7|required_with:Phone.homeArea', 
     'Phone.homeArea'  => 'string|min:3|required_with:Phone.homePhone', 
    ]; 
} 

形式I具有输入,比如

<input id="firstName" type="text" class="form-control" name="Patient[firstName]" value="{{ $user->getFirstName() }}" required autofocus placeholder="First Name"> 

而且在节省一切正常。 代码 $this->validate($request, $this->validationRules());

执行验证非常好。但....

在另外一个地方,当我想表明,一些信息在用户配置文件丢失,我执行这样的验证和它的失败:

$validator = Validator::make([ 
     'Patient[firstName]' => $user->getFirstName(), 
     'Patient[lastName]'  => $user->getLastName(), 
     'Patient.lastName'  => $user->getLastName(), 
     'Patient->lastName'  => $user->getLastName(), 
     'Patient.sex'  => $user->getSex(), 
     'Address.city'  => $address->getCity(), 
     'Address.states'  => $address->getState(), 
     'Address.address1'  => $address->getStreet1(), 
     'Address.zip'  => $address->getZip(), 
     'Phone.mobileArea'  => $mobilePhone->getArea(), 
     'Phone.mobilePhone'  => $mobilePhone->getNumber(), 
     'Phone.homePhone'  => $homePhone->getArea(), 
     'Phone.homeArea'  => $homePhone->getNumber(), 
    ], $this->validationRules()); 

正如你所看到的,我试过在数据数组中命名Patient-> lastName键的不同变体。但我仍然有错误,姓氏是必需的。 当我打印验证我可以看到这样的结构:

Validator {#300 ▼ 
    #data: array:12 [▼ 
    "Patient[firstName]" => "" 
    "Patient[lastName]" => "Colohanin" 
    "Patient->lastName" => "Colohanin" 
    "Patient->sex" => "female" 
    "Address->city" => "GOSHEN2" 
    "Address->states" => "NY" 
    "Address->address1" => "Aleco Russo 59/1 a.68" 
    "Address->zip" => "109242" 
    "Phone->mobileArea" => "793" 
    "Phone->mobilePhone" => "906990" 
    "Phone->homePhone" => "022" 
    "Phone->homeArea" => "3322278" 
    ] 
    #initialRules: array:1 [▼ 
    "Patient.lastName" => "required|string" 
    ] 

} 

据我了解,验证是否有“Patient.lastName”,但在数据阵列Laravel改造这个关键对象,并验证找不到这个关键规则在数据包中。在结果,我有错误 - >所需的患者姓氏(用于测试目的,我删除了其他规则)

所以有我的问题。有谁知道,如何在“dot”sintancs中设置数据数组?我应该如何命名数据数组中的“Patient.lastName”(Validator :: make()中的第一个参数)?使用下划线不接受

重写键(patient_firstName)

+1

的laravel文档状态,你需要使用点语法'验证::使()'。该错误必须在其他地方。 –

+0

正如你所看到的,我试过dot -syntax,但vaidator不能找到它 –

+0

@ xcy7e웃你的评论帮助我找到array_set函数感谢 –

回答

0

试试这个:

$this->validate($request->get('Patient'), $this->validationRules()); 

形式输入: 所有名称更改它:

<input id="firstName" type="text" class="form-control" name="Patient[firstName]" value="{{ $user->getFirstName() }}" required autofocus placeholder="First Name"> 
<input id="mobileArea" type="text" class="form-control" name="Patient[mobileArea]" value="{{ $user->mobileArea() }}" required autofocus placeholder="mobileArea" 

>

并更改所有验证器ULES使用:

protected function validationRules() 
{ 
    return [ 
     'Patient.firstName' => 'required|string|min:2', 
     'Patient.lastName'  => 'required|string', 
     'Patient.sex'  => 'required|string', 
     'Patient.city'  => 'required|string', 
     'Patient.states'  => 'required|string', 
     'Patient.address1'  => 'required|string|min:2', 
     'Patient.zip'  => 'required|string|min:2', 
     'Patient.mobileArea'  => 'string|min:3|required_with:Patient.mobilePhone', 
     'Patient.mobilePhone'  => 'string|min:7|required_with:Patient.mobileArea', 
     'Patient.homePhone'  => 'string|min:7|required_with:Patient.homeArea', 
     'Patient.homeArea'  => 'string|min:3|required_with:Patient.homePhone', 
    ]; 
} 

希望它能帮助

+0

正如我写的 - 使用下划线的重写键不接受(patient_firstName)。对不起,但它不可接受 –

+0

@ColohaninNik我不想这样做Patient_firstName,我将编辑我的答案 – Vynart

+0

在保存操作中,一切正常,$ this-> validate($ request,$ this-> validationRules());正确验证保存请求。问题出现在显示页面,我没有POST,GET,但我必须向用户显示他的一些数据无效 –

0

我突然发现,laravel助手已经array_set帮手这种阵列。 所以结果:

$data = [ 
     'Patient[firstName]' => $user->getFirstName(), 
     'Patient[lastName]'  => $user->getLastName(), 
     'Patient["lastName"]'  => $user->getLastName(), 
     'Patient.lastName'  => $user->getLastName(), 
     'Patient->lastName'  => $user->getLastName(), 
     'Address.city'  => $address->getCity(), 
     'Address.states'  => $address->getState(), 
     'Address.address1'  => $address->getStreet1(), 
     'Address.zip'  => $address->getZip(), 
     'Phone.mobileArea'  => $mobilePhone->getArea(), 
     'Phone.mobilePhone'  => $mobilePhone->getNumber(), 
     'Phone.homePhone'  => $homePhone->getArea(), 
     'Phone.homeArea'  => $homePhone->getNumber(), 
    ]; 

验证失败,但如果添加的元素抛出array_set帮手它有助于 array_set

 array_set($data, 'Patient.lastName'  , $user->getLastName()); 

之后,由lastName的有效性将不再失败。 希望它可以帮助别人