gpt4 book ai didi

php - Laravel Session Flash 持续 2 个请求

转载 作者:IT王子 更新时间:2023-10-29 00:02:04 29 4
gpt4 key购买 nike

最近我从 Codeigniter 换到了 Laravel,一切都很顺利,除了我遇到了 Session::flash 的问题。

当我创建新用户时,我收到成功消息,但它会持续 2 个请求,即使我没有通过验证器: enter image description here

我在 UsersController 中的代码:

function getCreateUser(){
$config = array(
'pageName' => 'createUser',
'pageTitle' => 'Create User',
'formUrl' => action('UsersController@postCreateUser'),
'modelFields' => array(
array('db_name' => 'employee_id', 'text' => 'Employee Id', 'mandatory' => TRUE),
array('db_name' => 'full_name', 'text' => 'Full Name', 'mandatory' => TRUE),
array('db_name' => 'email', 'text' => 'Email', 'mandatory' => FALSE),
array('db_name' => 'password', 'text' => 'Password','value' => '12345', 'mandatory' => TRUE)
),
'submit_text' => 'Create'
);
return View::make('layouts.form', $config);
}

function postCreateUser(){
$config = array(
'pageName' => 'createUser',
'pageTitle' => 'Create User',
'formUrl' => action('UsersController@postCreateUser'),
'modelFields' => array(
array('db_name' => 'employee_id', 'text' => 'Employee Id', 'mandatory' => TRUE),
array('db_name' => 'full_name', 'text' => 'Full Name', 'mandatory' => TRUE),
array('db_name' => 'email', 'text' => 'Email', 'mandatory' => FALSE),
array('db_name' => 'password', 'text' => 'Password','value' => '12345', 'mandatory' => TRUE)
),
'submit_text' => 'Create'
);
$validator = User::validate(Input::all());
if($validator->passes()){
$user = new User(Input::all());
$user->password = Hash::make(Input::get('password'));
$user->Company_id = '1';
$user->save();

Session::flash('message', 'User Created Successfully!');
Session::flash('alert-class', 'alert-success');
return View::make('layouts.form', $config);
}

return View::make('layouts.form', $config)->withErrors($validator->messages());
}

form.blade 中:

@if ( $errors->count() > 0 )
<div class="alert alert-danger">
<p>The following errors have occurred:</p>

<ul>
@foreach( $errors->all() as $message )
<li>{{ $message }}</li>
@endforeach
</ul>
</div>
@endif

master.blade 中:

@if(Session::has('message'))
<p class="alert {{ Session::get('alert-class', 'alert-info') }} alert-dismissable"> {{ Session::get('message') }}</p>
@endif

也许我不是唯一遇到这个问题的人,here是另一个悬而未决的问题。

更新

对于将来遇到此问题的任何人:切勿在未重定向的情况下刷新 session 数据。

我的代码现在看起来像这样:

function postCreateUser(){
$validator = User::validate(Input::all());
if($validator->passes()){
$user = new User(Input::all());
$user->password = Hash::make(Input::get('password'));
$user->Company_id = '1';
$user->save();

Session::flash('message', 'User Created Successfully!');
Session::flash('alert-class', 'alert-success');
} else {
Session::flash('message', Helpers::formatErrors($validator->messages()->all()));
Session::flash('alert-class', 'alert-danger');
}

return Redirect::action('UsersController@getCreateUser');
}

最佳答案

您正在刷新 session 数据并创建一个 View 而不是重定向,这意味着该消息将为该请求和下一个请求刷新,显示两次。

如果你想在不重定向的情况下显示当前请求的消息,我建议将错误提供给你的 View::make 而不是尝试闪烁消息。如果您必须在当前请求中闪烁消息,那么您将需要在查看后 Session::forget('key')Session::flush()

关于php - Laravel Session Flash 持续 2 个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24579580/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com