没有集体的 Laravel 形式

Tie*_*ger 0 php forms laravel laravel-blade

我正在学习 Laravel。据我所知,当前的稳定版本是 5.8。我正在学习教程并且非常喜欢该框架,但是当这些教程达到介绍如何合并表单的程度时,它会有点麻烦。所有这些教程都使用 LaravelCollective 表单,该表单从 5.8 开始不再有效,并且它是一个废弃的项目,因此无论如何我都不想使用它。

但这让我对在 Laravel 中使用表单的最佳实践感到困惑。我在创建表单方面有过一些尝试,但是......如果有道理的话,其中大部分只是 HTML,其中几乎没有任何 Laravel。唯一Laravel这里有点是form action,它指向store的功能TodosController。请参阅下文,了解名为create.blade.php.

@extends('layouts.app')

@section('content')
    <h1>Create Todo</h1>
    <form action="{{action('TodosController@store')}}" method="post">
        @csrf
        <div class="form-group">
            <label for="text">Text</label>
            <input type="text" name="text" class="form-control" placeholder="Enter title"/>
        </div>
        <div class="form-group">
            <label for="body">Body</label>
            <textarea class="form-control"  name="body" id="body" rows="10" placeholder="Enter details"></textarea>
        </div>
        <div class="form-group">
            <label for="due">Due date</label>
            <input type="text" name="due" class="form-control" placeholder="Enter due date"/>
        </div>
        <input type="submit" value="Submit" class="btn btn-primary">
    </form>
@endsection
Run Code Online (Sandbox Code Playgroud)

这很好用,但我只是觉得我在这里根本没有正确使用刀片。任何指针将不胜感激。

Pia*_*zzi 5

实际上,您在那里使用的 laravel 不仅仅是form action. 如文档中所述,@csrf代表跨站点请求伪造,它是保护您免受这种情况的 Laravel 方式:

Laravel 会为应用程序管理的每个活动用户会话自动生成一个 CSRF “令牌”。此令牌用于验证经过身份验证的用户是否是实际向应用程序发出请求的用户。

任何时候在应用程序中定义 HTML 表单时,都应该在表单中包含一个隐藏的 CSRF 令牌字段,以便 CSRF 保护中间件可以验证请求。您可以使用 @csrf Blade 指令生成令牌字段:

当你有一个PUT, PATCH OR DELETE表单时,你应该使用blade指令@method来通知laravel应该使用的动作:

HTML 表单不支持 PUT、PATCH 或 DELETE 操作。因此,在定义从 HTML 表单调用的 PUT、PATCH 或 DELETE 路由时,您需要向表单添加隐藏的 _method 字段。与 _method 字段一起发送的值将用作 HTTP 请求方法:

你可以做到这一点,只需使用:


    <form action="/foo/bar" method="POST">
    @method('PUT')
    @csrf
    </form>
Run Code Online (Sandbox Code Playgroud)

除此之外,我认为您使用 laravel/blade 就好了。请务必阅读文档以获取更多信息。

祝你好运!