2015-07-02 74 views
-1

我有一個表單提交給驗證數據的控制器。如果驗證失敗,它將重定向回輸入和錯誤。這是與表單提交交易的方法:Laravel 5 - 返回錯誤時爲什麼輸入爲空?

<?php namespace App\Http\Controllers; 

use Illuminate\Http\Request; 
use App\Models\User; 

class UserController extends Controller { 

    /** 
    * Create a new user. 
    * 
    * @param Reqeust  $request 
    * 
    * @return Void 
    */ 
    public function postCreate(Request $request) 
    { 
     $user = new User; 
     $rules = $user->rules(); 
     $rules['password'] = 'required|confirmed|min:8'; 
     $v = \Validator::make($request->except('_token', 'roles'), $rules); 
     if ($v->fails()) 
     { 
      return redirect()->back()->withInput($request->except('_token', 'password', 'password_confirmation'))->withErrors($v); 
     } 
     $user->fill($request->except('_token', 'password', 'password_confirmation')); 
     $user->password = \Hash::make($request->input('password')); 
     $user->save(); 

     return redirect()->route('webmanAccounts')->with('messages', [['text' => 'User account created', 'class' => 'alert-success']]); 
    } 

在顯示我檢查的形式,看是否name的領域之一,是目前如果是填充了數據的用戶對象的頁面。問題是input始終爲空。

<?php namespace BackEnd; 

use Illuminate\Http\Request; 
use Illuminate\Support\Facades\Request as RequestFacade; 
use App\Http\Controllers\Controller; 
use App\Models\Role; 
use App\Models\User; 

class UserController extends Controller { 

    public function __construct(Request $request) 
    { 
     if (! $request->user()->can('accounts')) 
     { 
      return abort(403, 'You do not have permission to access this page.'); 
     } 
    } 

    /** 
    * Display the create new user form and process any error messages. 
    * 
    * @param Reqeust  $request 
    * 
    * @return View 
    */ 
    public function create(Request $request) 
    { 
     $user = new User; 
     dump(RequestFacade::all()); 
     if (RequestFacade::has('name')) 
     { 
      $user->fill(RequestFacade::except('_token', 'roles')); 
      foreach (RequestFacade::only('roles') as $role) 
      { 
       $user->roles()->add($role); 
      } 
     } 
     return view('backend.user.create', ['title' => 'Website Manager :: Create New Account', 'user' => $user, 'roles' => Role::all()]); 
    } 

我已經試過RequestFacade$requestInput,全部顯示爲空。爲什麼數據不被傳回?

爲了增加這種奇怪感,我有另一個使用幾乎相同的代碼的項目,並且工作得很好。爲什麼它會爲一個項目工作,但不適用於另一個項目!?

+0

當您重新定位用戶時,您將失去所有發佈的數據。在重定向之前將發佈數據存儲在會話中。或者在錯誤查找頁面上呈現帖子表單。 – Tschallacka

+0

你的視角在哪裏? –

+0

@MichaelDibbets事實並非如此。正如我在我的文章中所說的,使用'withInput()'在我的其他項目中工作得很好。 – Styphon

回答

3

當您使用withInput()方法時,數據作爲「舊」數據閃存到會話中。

$request->old()應該給你一個所有「舊」數據的數組。

$request->old('name')應該給你「舊」的名字數據。

+0

工作,謝謝,但爲什麼'Request :: input()'工作在我的其他項目,但不是這個?兩者都是Laravel 5.1,代碼幾乎相同。我不明白。 – Styphon

+0

@Styphon Request :: input()從$ _GET和$ _POST superglobals獲取輸入。你的其他項目工作的唯一方式是數據通過get/post請求數據傳遞,而不是來自'redirect() - > back() - > withInput()'情境(通過閃爍傳輸數據到會議)。 – patricus

+0

old('line_1',$ address-> line_1);?>」> - 默認地址對象 – Smith