在我正在构建的网站上,访问者加载页面时会自动生成帐户。当一个帐户被创建时,新用户将被要求通过创建一个模态窗口来选择一个用户名,当用户提交新用户名时,数据将被发送回服务器,模态将关闭。

所以现在唯一的问题是我不确定如何调用这个模态窗口,只有在新帐户生成时。现在它会在每次页面重新加载时出现,但应该发生在帐户生成之后。

所以这应该在创建帐户时调用,但只有在发生这种情况时才调用:

$('#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/

10-12 14:26
查看更多