2015-04-22 57 views
0

我是Laravel世界的新手,我有一個目前無法解決的問題。驗證後在控制器中獲取表格輸入

我的問題是: 如何在驗證失敗後訪問控制器的create()函數中提交的值?

以下是我有:

  1. PostsController,在routes.php文件
  2. 定義爲資源在控制器我常用的方法create()store()

下面是一些代碼:

//PostsController 
public function create() 
{ 
    //Here I need to get the inputs 
    return view('posts.create'); 
} 

public function store(Requests\PostsRequest $request) 
{ 
    //store actions 
} 

我已創建

public function rules(){ 
    $rules = [ 
     'category_id'=>'required', 
     'name'=>'required|min:3', 
     'description'=>'required' 
    ]; 
    return $rules; 
} 

如果一切順利的進入已被存儲到數據庫,但如果驗證失敗,它加載的create()一些驗證消息:其中有像一些規則PostsRequest類。 我需要在窗體中加載所選類別的祖先,這應該通過知道提交的category_id元素的值來實現。

我試過到目前爲止:

  1. 試圖在創造像這樣添加參數:

    public function create(Requests\PostsRequest $request){...} 
    

    但去無限循環。我明白爲什麼因爲控制器的資源定義,並「認爲」它是存儲方法。

  2. 試圖打印門面Input::all()但它是空的

  3. 把我的:

    public function create(){ 
        $request = new \Request(); 
        //print $request 
    } 
    

    但它不工作,無論是我認爲這是正確的方式。

所以任何想法如何獲得這些值在控制器將高度讚賞。

回答

0

如果您使用{!! Form::open() !!}(或Form::model),則所有內容都會再次加載(重新導向後)。 Laravel自動捕獲「Input :: old」值。

從來源:FormBuilder.php(照亮/ html包 - 5.0版)

/** 
* Get the value that should be assigned to the field. 
* 
* @param string $name 
* @param string $value 
* @return string 
*/ 
public function getValueAttribute($name, $value = null) 
{ 
    if (is_null($name)) return $value; 

    if (! is_null($this->old($name))) 
    { 
     return $this->old($name); 
    } 

    if (! is_null($value)) return $value; 

    if (isset($this->model)) 
    { 
     return $this->getModelValueAttribute($name); 
    } 
} 

如果你不想使用照明/ HTML,只需要添加在你的價值屬性:

Input::old('input_name') 

如果你想獲得請求。只需添加到您的創建方法。

public function create(Request $request){ 
    $data = $request->all(); //or whatever you want.. 
} 
+0

請參閱我的評論到其他答案 – Kbaum

0

您應該能夠輸入::舊的()

在你的意見來獲取數據,你可以做

<input type="text" name="name" value="{{ old('name') }}" /> 

這將使從名稱的值,如果它被髮送。

也看到這個最近的問題/答案; Laravel 5 - Validation error on form doesn't re-enter user input

+0

我的問題是不顯示該字段中的值,而是以某種方式在控制器中獲取它。我有很多嵌套的類別,我需要將它們顯示爲每個級別的多個選擇。當用戶從級別3中選擇類別,並且驗證失敗時,我需要加載2個更多級別才能顯示當前選擇,順便說一下,這個選擇是通過ajax加載的(例如,選擇cat1,(加載新選擇),然後選擇cat1.2 ,(加載新的選擇)然後選擇 – Kbaum