这是一个从零开始的项目,所以如果你想要的话,你可以完全像我展示的那样。
我创建了以下迁移,只是为了创建用户表并添加新记录:
public function up()
{
Schema::create('users', function ($table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name', 60)->unique();
$table->string('email', 120)->unique();
$table->string('password', 256);
$table->rememberToken();
$table->timestamps();
});
DB::table('users')->insert(
[
[
'name' => 'admin',
'email' => 'admin@admin',
'password' => Hash::make('password')
]
]
);
}
public function down()
{
Schema::drop('users');
}
我的路线是:
<?php
Route::get('/', [
'as' => 'main_route',
function () {
return View::make('hello');
}
]);
Route::post('/', [
'as' => 'main_route',
function () {
if (!Auth::attempt(
[
'email' => Input::get('email_to_fill'),
'password' => Input::get('password_to_fill'),
]
)
) {
}
return Redirect::route('main_route')->withInput();
}
]);
Route::get('/logout', [
'as' => 'logout',
function () {
Auth::logout();
return Redirect::route('main_route');
}
]);
我的hello.blade.php
是:
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
</head>
<body>
@if (Auth::check())
I'm logged in. E-mail {{ Auth::user()->email }}
<a href="{{ URL::route('logout') }}">Log out</a>
{{Form::open(['url' => URL::route('main_route'), 'role' => 'form']) }}
{{ Form::text('email', Auth::user()->email) }}
{{Form::submit()}}
{{Form::close() }}
@else
{{Form::open(['url' => URL::route('main_route'), 'role' => 'form']) }}
{{ Form::text('email', 'do not touch this') }}
{{ Form::text('email_to_fill', 'admin@admin') }}
{{ Form::text('password_to_fill', 'password') }}
{{Form::submit()}}
{{Form::close() }}
@endif
</body>
</html>
到目前为止没什么复杂的。
所以我在浏览器主页面打开并点击发送表格(数据已填入HTML,所以我不需要填写任何内容)。
下图:
发送表单后我正在登录但是你看到输入的值不正确。在代码中,它应显示在输入值Auth::user()->email
中,但它在发送之前显示来自email
字段的旧值。
问题:是否正确Laravel行为 - 使用withInput
进行重定向时,它会自动填充所有具有相同值的表单输入,甚至传递手动其他值,它将使用旧数据?可能这个例子可能有点简单(根本没有用户登录),但这是我遇到的确切问题所以我把它放在这里尽可能简单。
答案 0 :(得分:1)
这是预期的行为。我会发布一个更深入的答案,但我无法想到任何答案;这就是它的作用:P
您可能想要这样做的一个示例是,如果您正在编辑记录;它应该从DB加载记录并填充编辑表单。然后你提交,结果证明验证失败了。它应该记住您发布的数据,并将其优先于DB值,以便您可以更改它。
最简单的解决方法是,如果身份验证成功,则不会重定向->withInput()
。