2017-08-04 151 views
0

我很難找到我的問題的答案,而我的測試沒有證明是有用的。所以也許這裏有人會遇到我面臨的同樣的問題。Laravel 5.4:動態驗證規則

我有以下種圖案名稱輸入projects-0-1project-0-2project-1-0等等...... 這些文件輸入,使人們可以上傳文檔和/或圖像。

所以基本上,我一直試圖讓會(理想)是類似的東西驗證消息:

$validator->getMessageBag()->add('project-*-*', 'File is empty!'); 

OR

$validator->getMessageBag()->add('project-*', 'File is empty!'); 

我試了幾件事情已經和似乎沒有任何工作。

我得到添加自定義消息的原因是該文件僅在$request對象爲空時根本未驗證。所以我首先需要檢查$request->hasFile是否和我不想添加錯誤信息。

需要考慮的事情:

  • 輸入可動態添加到形式,所以我不知道我需要事先驗證文件輸入的確切人數。

  • 即使這不應該影響代碼和驗證,值得注意的是,當我將表單嵌入到另一個網站時,所有事情都是通過ajax發生的。因此我創建了端點等...

任何提示?

+0

你試過像這個''file。*。mimes'=>'只允許PDF,JPEG,PNG。','https://stackoverflow.com/a/45188623/5148479 – Hari

+0

是的,我嘗試了所有爵士樂,它並沒有幫助。我沒有驗證本身的問題,但是當它們不是請求的一部分時,將錯誤消息與文件輸入相匹配,因爲當表單提交時它們保持爲空。 – daneczech

+0

我基本上需要的是把一個通配符輸入名字在我的規則陣列: '$ globalRules = [ ... 'project_documents-0-0'=> '需要|文件', ... ]' 我希望最後的規則,能夠在破折號後0-9之間匹配任意數量的.. 因此,我認爲這樣的事情會做: '「project_documents - * - *」 => 'required | file','但的確不是。 – daneczech

回答

0

對,如果有人也面臨這個問題,回到這裏。我發現了一個「哈克」的方式來到那裏,它爲我做了詭計。

由於每個輸入文件都是動態添加到DOM中的,我添加了一個額外的隱藏輸入,它將文件輸入的名稱保存爲一個值。

然後在我控制我不服這樣的:

public function createValuesKeyArray ($preset) 
{ 
    $regexPattern = '/^'. $preset .'-[0-9]*$/'; 
    $customPresets = preg_grep($regexPattern, array_keys(Input::all())); 
    $keys = []; 
    foreach ($customPresets as $customPreset) { 
     array_push($keys, $customPreset); 
    } 
    return $keys; 
} 

// This allows me to get all hidden input names in an array in order to get its value from the $request

$hiddenInputs = $this->createValuesKeyArray('hidden-project-name');

一旦我得到這個數組,我可以做類似的東西和dinamycally加我的一套規則對於存在於DOM中的輸入文件:

foreach($hiddenInputs as $hiddenInput){ 
    $globalRules[$request[$hiddenInput]] = 'required'; 
} 

不知道這是否是正確的方式,但它爲我做了這項工作,而且我沒有發現可怕的代碼。我會堅持下去,直到找到更好的方式。