在我正在构建的网站上,访问者加载页面时会自动生成帐户。当一个帐户被创建时,新用户将被要求通过创建一个模态窗口来选择一个用户名,当用户提交新用户名时,数据将被发送回服务器,模态将关闭。
所以现在唯一的问题是我不确定如何调用这个模态窗口,只有在新帐户生成时。现在它会在每次页面重新加载时出现,但应该发生在帐户生成之后。
所以这应该在创建帐户时调用,但只有在发生这种情况时才调用:
$('#i-modal').foundation('reveal', 'open');
创建帐户时,会发生这种情况。请求发送到
/createUser
用户 Controller :
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 session
中,并且可能还会自动将用户登录到系统。然后,如果页面重新加载,UserController
会检查 session 以查看用户名是否已存储或用户是否已登录。根据结果是否显示模式。
因此,当第一次加载页面时,您可以执行以下步骤(接下来是未经测试的代码作为每个代码部分可以放置的位置的示例),
1. 检查 session (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 (或通过 View 从您的 php 代码输入,例如从 Controller 返回 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 如果用户输入现有用户名或生成新用户名,请登录用户并将用户名存储在 session 中。
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*/
}
}
});
此外,在您的代码中,您可能应该将用户名存储到一个持久层,以检查现有用户名,允许用户使用他们现有的用户名并恢复/检索您也可能在应用程序中持久化的任何类型的状态或数据。
关于php - Laravel - 检查何时创建帐户,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20123453/