![](/img/trans.png)
[英]MethodNotAllowedHttpException generated using return back()->withInput() in Laravel 5.4
[英]Return back from edit form after several updates in Laravel 5.4
我正在嘗試向我的編輯表單添加功能。 也許不是最佳實踐,但是...
我想保留原始網址以進行多次更新。 當用戶第一次登陸編輯表單(從列表或單個視圖)時,我想要一個取消按鈕,將用戶重定向回..“推薦人”。 更新后,我重定向回帶有成功消息的編輯表單。 我想隱藏取消按鈕並顯示后退按鈕。 用戶可以多次編輯。
我試圖通過請求傳遞原始 url,但這並沒有很好的結束。 現在我正在嘗試在會話中存儲 url。 如果有效,但會話項值在第二次迭代中被覆蓋。
也許我以錯誤的方式使用會話? 任何的想法? 也許另一種“更好”的方式?
我的 edit.blade 中的代碼
@if(url()->current() != URL::previous())
@if(Session::has('myreferrer'))
{{ Session::forget('myreferrer') }}
@endif
{{ Session::put('myreferrer', URL::previous()) }}
<a href="{{ URL::previous() }}" class="btn">Cancel</a>
@else
<a href="{{ Session::pull('myreferrer') }}" class="btn">Back</a>
@endif
Session::pull()
從會話中獲取值並將其刪除。 這就是頁面第二次不起作用的原因:
URL::current() != URL::previous()
'myreferrer'
設置為上一個URL::current() === URL::previous()
'myreferrer'
設置為null
(因為Session::pull()
)URL::current()
仍然=== URL::previous()
'myreferrer'
仍然為null
'myreferrer'
為null
),瀏覽器將其解釋為當前 URL 我們可以使用Session::get()
獲取值並將其保留在會話中,但這會污染會話,因為當用戶離開編輯表單時, 'myreferrer'
仍然存在。
更重要的是,這個邏輯不屬於視圖模板。 相反,我們將使用控制器使用隱藏輸入字段傳遞'myreferrer'
的值:
public function edit($id)
{
// fetch data...
return view('edit')
// if "myreferrer" isn't in the session yet, use previous URL:
->with('myreferrer', Session::get('myreferrer', URL::previous()));
}
public function update(Request $request)
{
// save data...
return back()
->with('success', 'Your success message.')
// "flashes" to the session only for the next page load:
->with('myreferrer', $request->get('myreferrer'));
}
<form ...>
<input type="hidden" name="myreferrer" value="{{ $myreferrer }}"/>
...
@if (Session::has('success'))
<a href="{{ $myreferrer }}" class="btn">Back</a>
@else
<a href="{{ $myreferrer }}" class="btn">Cancel</a>
@endif
我假設您實際上需要先前的URL 是動態的,例如用戶是否可以從不同的頁面打開編輯表單。 當您不需要這種靈活性時,命名路由會提供更好的語義。
為了學習,這里有一些與您的代碼相關的其他指針:
Session::forget()
Session::has()
之前我們不需要Session::has()
forget()
如果鍵不存在,則forget()
跳過)。 此外,調用Session::put()
之后無論如何都會覆蓋這里的值,因此我們可以刪除整個@if(Session::has('myreferrer'))
塊。url()->
和URL::
做同樣的事情。 我們可能應該選擇一個以保持一致性。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.