2017-07-30 59 views
0

儘管我們知道這些錯誤,但我們在laravel表單中也有一些常見錯誤。當我們知道爲什麼遇到錯誤時,我們很容易意識到錯誤是多麼的愚蠢。我在這裏添加了一些錯誤。Laravel形式的常見錯誤

+1

我投票關閉這一問題作爲題外話,因爲它實際上不是一個問題。 – fubar

+0

@farar我已經分享了我對形式上的一些愚蠢錯誤的瞭解,如果其他人在這裏知道其他一些錯誤,那麼在這裏會有很好的答案。 –

+0

我明白,並同意它可能是有益的。我只是不認爲用_tips_發佈問題是分享這些信息的最佳方式。 – fubar

回答

1

以下是我們在laravel窗體中執行的一些常見錯誤列表。

1. CSRF令牌場

我們需要添加在每個laravel形式來保護跨站點請求僞造(CSRF)攻擊應用程序隱藏CSRF令牌場。我們可以使用csrf_field來生成隱藏的csrf標記字段,如下所示。

<form method="POST" action="/create"> 

    {{ csrf_field() }} 

    ... 

</form> 

當我們在VerifyCsrfToken.php線...看到錯誤TokenMismatchException,那麼我們只記得我們所犯的錯誤。

2.文件上傳

當你犯了一個POST請求,你必須編碼形成以某種方式請求的主體中的數據。

當你寫客戶端代碼,所有你需要知道的是使用的multipart/form-data的當你的形式包括任何元素。

在與形式的文件上傳,有時候我們忘了加上ENCTYPE =「的multipart/form-data的」使剛剛命名文件的傳遞與form-request,沒有文件被上傳。因此,我們需要做的是

<form method="POST" action="/create" enctype="multipart/form-data" > 

    {{ csrf_field() }} 

    <input type="file" name="upload"> 

    .... 

</form> 

enctype="multipart/form-data"意味着沒有字符將被編碼。這就是將文件上傳到服務器時使用此類型的原因。

因此,multipart/form-data用於表單需要二進制數據(如文件的內容)上傳時。

3.陣列輸入字段

當我們在表單輸入字段的陣列,一些時候我們忘記了陣列輸入定義工作並使用像

<input name="data"> 
.... 
<input name="data"> 

由於所有數組輸入我們知道即使有多個輸入字段,也只會發送一個值。所以,我們需要定義輸入字段爲

<input name="data[]"> 
.... 
<input name="data[]"> 

而且,數組的另一個錯誤就是在服務器端驗證這種情況。

$this->validate($request, [ 
    'data' => 'required|alpha_num' 
], $messages = [ 

] 

該驗證將總是失敗因爲data是陣列的,所以它不會被字母數字。因此,我們可以驗證這樣的:

$this->validate($request, [ 
    'data' => 'required', 
    'data.*' => 'required|alpha_num' 
], $messages = [ 

] 

此之後,我們可以輕鬆地訪問data[]像:

foreach($request->data as $d){ 

    // save data with loop 

}