簡體   English   中英

沒有集體的Laravel形式

[英]Laravel form without Collective

我正在學習Laravel。 據我所知,當前的穩定版本是5.8。 我正在關注教程,並且確實喜歡該框架,但是當這些教程到達介紹表單如何合並的地步時,這會有些麻煩。 所有這些教程都使用LaravelCollective形式,該形式從5.8開始不再使用,並且是一個廢棄的項目,因此我寧願不使用它。

但是,這讓我對使用Laravel使用表單的最佳實踐感到困惑。 我在創建表單方面花了很多功夫,但是...如果可以的話,大多數只是HTML,幾乎沒有Laravel在其中。 Laravel唯一的一點是form action ,它指向TodosControllerstore函數。 參見下文,獲取名為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

這工作正常,但是我只是覺得我根本沒有正確使用刀片。 任何指針將不勝感激。

實際上,您在那里使用的不僅是form action而且還有更多的laravel。 @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>

除此之外,我認為您正在使用laravel / blade就好了。 確保您閱讀了文檔以獲取更多信息。

祝好運!

您所擁有的是一個很好的起點,但是,另一個值得一看的好地方是樣板注冊表單 (這不是來自Laravel官方項目頁面,因為可選地引入了樣板,默認情況下不在正式的repo中)。

您可以基於此進行一些改進:

 <div class="form-group">
     <label for="text">{{__('Text')}}</label>
     <input type="text" name="text" class="form-control{{ $errors->has('text') ? ' is-invalid' : '' }}" value="{{ old('text') }}"placeholder="Enter title"/>
 </div>

附加功能:

  • __('Text')將根據所選的語言環境和可用的語言資產自動翻譯Text
  • {{ $errors->has('text') ? ' is-invalid' : '' }} 如果服務器端驗證失敗(因此將$errors變量傳遞給視圖),則{{ $errors->has('text') ? ' is-invalid' : '' }}將使用bootstrap-4錯誤樣式“修飾”該字段。
  • {{ old('text') }}將使用先前填充的值預先填充輸入,以防表單驗證失敗並且用戶被重定向回同一頁面。

這將有助於改善用戶體驗,但是請記住,這些都是服務器端工具(因為Laravel是服務器端框架),因此添加客戶端檢查和驗證可能是更好的用戶體驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM