在我正在构建的网站上,当访问者加载页面时会自动生成帐户.创建帐户时,将要求新用户通过创建模态窗口来选择用户名,当用户提交新用户名时,数据将被发送回服务器并且模式将关闭.
所以现在唯一的问题是,我不知道如何在生成新帐户时调用此模态窗口.现在它每次都会显示页面重新加载,但应该发生的事情是仅在生成帐户之后.
$('#i-modal').foundation('reveal','open');
创建帐户时,会发生这种情况.请求被发送到/ createUser
UserController的:
public function createUser() { $newUser = new User; $newUser->username = 'user-'.Helpers::randomLowerCase(4); $newUser->save(); // Check if user isn't logged in yet if (!Auth::check()) { Auth::login($newUser); } else { // ... } // Return the user home return Redirect::action('HomeController@showHome'); }
那么我该如何做,只调用$(‘#i-modal’).foundation(‘reveal’,’open’);什么时候创建帐户?
解决方法
一种方法可以是在http会话中存储用户输入的用户名,并且可能还自动将用户登录到系统.然后,如果页面重新加载,则UserController会在会话中检查是否已存储用户名或用户是否已登录.根据结果显示模式或不显示模式.
因此,当首次加载页面时,您可以执行以下步骤(然后是未经测试的代码,作为可以放置代码的每个部分的示例),
1.检查会话(PHP http session,egsession_start(); if(isset($_ SESSION [$username])){..)以查看用户名是否存在或Auth :: check().
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如果用户输入现有用户名或生成新用户名,请登录用户并将用户名存储在会话中.
.... 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*/ } } });
同样在您的代码中,您应该将用户名存储到持久层,以便检查现有用户名,允许用户使用他们现有的用户名,并恢复/检索您可能在应用程序中持久保存的任何类型的状态或数据.