Wal*_*mar 20 php session laravel laravel-4
最近我从Codeigniter换了Laravel,一切都很顺利,除了我遇到了问题Session::flash.
当我创建新用户时,我获得成功消息,但它将持续2个请求,即使我没有通过验证器:

我的代码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());
}
Run Code Online (Sandbox Code Playgroud)
在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
Run Code Online (Sandbox Code Playgroud)
在master.blade:
@if(Session::has('message'))
<p class="alert {{ Session::get('alert-class', 'alert-info') }} alert-dismissable"> {{ Session::get('message') }}</p>
@endif
Run Code Online (Sandbox Code Playgroud)
也许我并不孤单这个问题,这里是另一个悬而未决的问题.
对于将来面临此问题的任何人: 永不闪回会话数据而不重定向.
我的代码现在看起来像这样:
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');
}
Run Code Online (Sandbox Code Playgroud)
Dre*_*rew 25
您正在闪烁会话数据并创建视图而不是重定向,这意味着该消息将为此请求和下一个请求闪烁,显示两次.
如果您想在不重定向的情况下在当前请求上显示消息,我建议您将错误提供给您View::make而不是尝试Flash消息.如果您必须在当前请求中闪烁消息,那么您将需要Session::forget('key')或Session::flush()在您的视图之后.
以下似乎可以从5.1版本开始提供.虽然Laravel的文档页面中没有提到有关会话的方法.
session()->now()
Run Code Online (Sandbox Code Playgroud)
这与flash相同,但不会持续到下一个请求.
正如@Drew早些时候所说
您正在闪烁会话数据并创建视图而不是重定向,这意味着该消息将为此请求和下一个请求闪烁,显示两次.
在创建视图时,一种简单的方法是闪烁消息:
Session::flash($key, $value);
Session::push('flash.old', $key);
Run Code Online (Sandbox Code Playgroud)
快乐的编码!
| 归档时间: |
|
| 查看次数: |
16507 次 |
| 最近记录: |