2015-09-09 34 views
2

我試圖創建一個搜索表單,用戶必須從某些下拉菜單中進行選擇並在幾個字段之一中輸入文本。問題是我正在重新顯示搜索頁面,其結果在下面。要做到這一點,我不重定向,我只是返回一個視圖與我需要壓縮的數據集一起。成功驗證後重新填充用戶輸入

有沒有什麼辦法可以檢索輸入,類似於在驗證失敗後重定向時,如何執行Input :: old('x')?

的路線是:

Route::get('search', ['as' => 'main.search.get', 'uses' => '[email protected]']); 

Route::post('search', ['as' => 'main.search.post', 'uses' => '[email protected]']); 

的代碼示例中,我的觀點:

{!! Form::open(array('route' => 'main.search.post', 'class' => 'form-inline align-form-center', 'role' => 'form')) !!} 

<div class="form-group"> 
    {!! Form::label('product_code', 'Product Code: ',['class' => 'control-label label-top']) !!} 
    {!! Form::text('product_code', Input::old('product_code'), ['class' => 'form-control input-sm']) !!} 
</div> 

所以當你提交一個搜索,它調用showSearchResults,然後返回一個視圖,如果它成功,如果它沒有通過我的SearchRequest類進行驗證,它將被重定向到main.search.get路徑,打印錯誤並將輸入返回到字段。

我已經做了很多搜索,並且已經或多或少空手而過,如果有一種方法可以說 - > withInput()返回視圖(而不是重定向)或其他東西。

目前我唯一的解決方案是Input :: flash(),但由於我沒有重定向,所以數據仍然存在額外的刷新。在這一點上這不是什麼大問題,但我想知道是否有其他人有更好的解決方案。

編輯 - 從控制器下面的代碼,其中返回視圖:

... 

    Input::flash(); 
    return view('main.search', compact('results', 'platformList', 'versionList', 'customerList', 'currencyList', 'customer', 'currency')); 
} 

謝謝

+0

你可以顯示控制器的方法代碼嗎?看起來你在重定向之前忘記了一步,因爲laravel實際上可以做到這一點。 – manix

+0

我沒有重定向,我正在返回一個視圖,這就是我遇到問題的原因,我沒有重定向,只是返回視圖。 – hughjidette

+0

你使用的是JavaScript嗎?當您返回視圖時,我沒有看到代碼 – manix

回答

0

我有同樣的問題。爲我工作的解決方案是將以下行添加到控制器。

session(['_old_input' => $request->input()]); 

現在,我將解釋它是如何工作的。

在視圖中,全局函數老()被稱爲:

<input type="username" id="username" class="form-control" name="username" value="{{ old('username') }}" placeholder="Username" autofocus> 

此功能在供應商/ laravel /框架/ src目錄/照亮/基金/ helpers.php

function old($key = null, $default = null) 
{ 
    return app('request')->old($key, $default); 
} 

這就要求照亮\ HTTP \請求 - >老()

public function old($key = null, $default = null) 
{ 
    return $this->session()->getOldInput($key, $default); 
} 

其中要求照亮\會議\ Store-> getOldInput()

public function getOldInput($key = null, $default = null) 
{ 
    $input = $this->get('_old_input', []); 
    return Arr::get($input, $key, $default); 
} 

此調用正在尋找_old_input會話。所以解決方案是使用這個值將輸入添加到會話中。

希望這會有所幫助。

+1

實際上,這種解決方案導致輸入永久存儲在用戶會話中,直到他們輸入新的東西。我只想將輸入保存在一個提交的字段中,使用上面提到的Input :: flash()保留了兩次重新加載,這很煩人但可行,您的解決方案會永久保留它,因爲您將它放入會話永久,而不是閃光。 雖然我的答案格式很棒,但我學到了一些關於Laravel內部的知識。 :-) – hughjidette

+0

我同意。我認爲你的解決方案更好。我實際上用我的代碼中的答案替換了我的代碼片段:) – Aine