2017-08-11 164 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的有效性將不再失敗。 希望它可以幫助別人