使用withInput的Laravel重定向不允许更改输入值

时间:2014-09-19 12:09:54

标签: php laravel laravel-4

这是一个从零开始的项目,所以如果你想要的话,你可以完全像我展示的那样。

我创建了以下迁移,只是为了创建用户表并添加新记录:

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,所以我不需要填写任何内容)。

下图:

Page before sending form

Page after login

发送表单后我正在登录但是你看到输入的值不正确。在代码中,它应显示在输入值Auth::user()->email中,但它在发送之前显示来自email字段的旧值。

问题:是否正确Laravel行为 - 使用withInput进行重定向时,它会自动填充所有具有相同值的表单输入,甚至传递手动其他值,它将使用旧数据?可能这个例子可能有点简单(根本没有用户登录),但这是我遇到的确切问题所以我把它放在这里尽可能简单。

1 个答案:

答案 0 :(得分:1)

这是预期的行为。我会发布一个更深入的答案,但我无法想到任何答案;这就是它的作用:P

您可能想要这样做的一个示例是,如果您正在编辑记录;它应该从DB加载记录并填充编辑表单。然后你提交,结果证明验证失败了。它应该记住您发布的数据,并将其优先于DB值,以便您可以更改它。

最简单的解决方法是,如果身份验证成功,则不会重定向->withInput()