這是從頭開始的項目,所以如果您想要,您可以按照我的說明完成。使用withInput的Laravel重定向不允許更改輸入值
我創建了以下遷移剛剛創建的用戶表並添加新的記錄:
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' => '[email protected]',
'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', '[email protected]') }}
{{ Form::text('password_to_fill', 'password') }}
{{Form::submit()}}
{{Form::close() }}
@endif
</body>
</html>
沒有什麼複雜至今。
因此,我打開我的瀏覽器主頁面並單擊發送表單(數據已填充到HTML中,因此我不需要填寫任何內容)。
以下圖片:
發送表單後我被登錄,但正如你看到的輸入值是不正確的。在代碼中,它應該顯示在輸入值Auth::user()->email
中,但它在發送前從email
字段顯示舊值。
問題: - 在使用withInput
與重定向它會自動填充具有相同值的所有表單輸入,甚至通過手動其他值將使用舊數據是否正確Laravel行爲?大概這個例子可能會更簡單一些(根本沒有用戶登錄),但這是我面對的確切問題,所以我儘可能簡單地把它放在這裏。
所以它基本上意味着當我有表單時,我不需要在使用withInput時爲任何字段設置值,因爲Laravel會自動填充所有字段的值。如果例如對於一個字段,我想設置其他值,我需要更改此輸入名稱或不使用withInput方法或使用Input :: except?我浪費了大約6個小時將問題縮小到上面的代碼,因爲我認爲這裏的'Auth'存在相當大的問題,而不僅僅是形式。 – 2014-09-19 12:43:04
是的 - 如果你真的需要,我會親自使用'Input :: except',但是你也可以做一些類似於通過插頁式控制器操作(例如'/ login' POSTs到'/ login/process'然後在登錄時轉發到'/ dashboard')。這樣,你可以在失敗時將' - > withInput()'重定向到 – Joe 2014-09-19 13:11:20
事實上,這是更復雜的形式,其中有很多字段,如果用戶沒有登錄,他可以填寫要登錄的字段,如果他重新發送表單並且其他一些數據無效,我想顯示他的用戶數據。現在我知道我可以例如更改這兩個輸入名稱並以其他方式解決它。謝謝 – 2014-09-19 13:14:08