一种方法可能是将用户输入的用户名存储在http session 中,并且可能还会自动将用户登录到系统。然后,如果页面重新加载,UserController 会签入会话以查看用户名是否已存储或用户是否已登录。根据结果是否显示模式。
因此,当第一次加载页面时,您可以执行以下步骤(后面是未经测试的代码,作为每个部分代码可以放置的示例),
1.检查会话(php http session,例如session_start();if(isset($_SESSION[$username])){..)查看是否存在用户名或Auth::check()。
php
Route::get('checkUser', 'UserController@checkUser');
Route::get('createUser/{username}', 'UserController@createUser');
class UserController extends BaseController {
public function checkUser(){
session_start();
if(isset($_SESSION["username"])){/*or use something like Auth::check()*/
return Response::json(array('exists' => 'true'));
/*or redirect e.g. return Redirect::action('HomeController@showHome');*/
/*or render a view e.g. return View::make('user.page', array('username' => $username));*/
}else{
return Response::json(array('exists' => 'false'));
}
}
....
1.1如果存在,不要执行显示基础模态和欢迎用户的js代码。
1.2如果不存在,则执行js代码并显示模态窗口要求用户登录。
js(或通过视图从您的 php 代码输入,例如从控制器返回 View::make('user.page', array('username' => $username) );)
$.ajax({
url: "checkUser"
success: function(data) {
if(!data.exists) {
$('#i-modal').foundation('reveal', 'open');
}else{
/*set any content e.g. welcome user*/
}
}
});
1.2.1 如果用户输入现有用户名或生成新用户名,则登录用户并将用户名存储在会话中。
php
....
Route::get('createUser/{username}', 'UserController@createUser');
class UserController extends BaseController {
....
/*your code slightly modified*/
public function createUser($username)
{
// Check if user isn't logged in yet
if (!Auth::check()/*&& if persistence is used, which is best to actually use it to persist usernames, check if the username is available*/) {
$newUser = new User;
//$newUser->username = 'user-'.Helpers::randomLowerCase(4);
$newUser->username=$username;
$newUser->save();
Auth::login($newUser);
} else {
return Response::json(array('created' => 'false'));
/* or return Redirect::action('HomeController@loginFailed');*/
}
// Return the user home
return Redirect::action('HomeController@showHome');
}
....
js
$.ajax({
url: "createUser",
data:{usernae:the_username_from_modal}
success: function(data) {
if(!data.created) {
/*if the redirection is not handled by the controller, handle the failed login/registration of existing username*/
}
}
});
此外,在您的代码中,您可能应该将用户名存储到持久层,以便检查现有用户名,允许用户使用他们现有的用户名并恢复/检索您可能还保留在其中的任何类型的状态或数据你的应用程序。