Laravel形式的常见错误

时间:2017-07-30 03:22:44

标签: forms laravel

即使我们知道错误,我们也会以laravel形式出现一些常见错误。当我们知道为什么会遇到错误时,我们很容易意识到错误是多么愚蠢。我在这里添加了一些错误。

1 个答案:

答案 0 :(得分: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 =&#34; multipart / form-data&#34; ,以便只使用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

}