【发布时间】:2015-09-19 14:33:12
【问题描述】:
我有一个提交给控制器的表单,该控制器验证数据。如果验证失败,它会使用输入和错误重定向回来。这是处理表单提交的方法:
<?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、$request和Input,都显示为空。为什么没有传回数据?
更奇怪的是,我还有另一个项目,它使用几乎相同的代码,并且运行良好。为什么它对一个项目可以正常工作,而对另一个项目却不行!?
【问题讨论】:
-
当您以物理方式重定向用户时,您会丢失所有帖子数据。在重定向之前将发布数据存储在会话中。或者在错误查找页面上呈现帖子表单。
-
@MichaelDibbets 这不是真的。正如我在帖子中所说,在我的其他项目中使用
withInput()非常好。
标签: php forms validation laravel laravel-5