Laravel 4:同一路线上的多页表格?

时间:2014-06-02 23:04:41

标签: php laravel laravel-4

大家好,我被困了。

我想在Laravel 4中注册用户。现在问题是,我想首先获取电子邮件和密码并将其保存在数据库中。在注册过程的第2步中,我想抓住所有其他细节,如名字和姓氏等。

困难在于,所有内容都应该在名为注册的一条路径下,例如http://example.org/signup下的所有内容

另一个困难是,我必须使用相同的方法(GET和POST)两次访问相同的路线,因为我曾经获得并发布电子邮件和密码的表单,然后我得到并发布第一个,最后一个和公司名称进入数据库。

我提出了以下解决方案,将所有内容存储到会话中,因为通过会话我可以访问变量。因此,每当我访问我的UserController时,我都会检查,如果会话中有数据,如果是,则重定向到表单2.

以下是我的所有文件:

http://help.laravel.io/d4104cae42f9a2efe1466ce53d086826bc9f6d7f

来自UserController的我的Get-Method:

public function create()
{
    if(Session::has('email')) {
        return View::make('frontend.signup.step2');
    }
    else {
        return View::make('frontend.signup.step1');
    }       
}

来自UserController的My Post-Method:

public function store()
{
    // If User has a email and password in the session from the first create-View
    // his data should be stored and then he gets redirected to a new create-View

    Session::flush();

    Session::put('email', Input::get('email'));
    Session::put('password', Input::get('password'));

    if (Session::has('email')) {

        try
        {
            // Let's register a user.
            $user = Sentry::register(array(
                'email'    => Input::get('email'),
                'password' => Input::get('password'),
            ));

            // Let's get the activation code
            $activationCode = $user->getActivationCode();

            // Send activation code to the user so he can activate the account


            // Save Email in Emaillist
            Email::create(array(
                'email' => Session::get('email')
            ));

            // Redirect 
            return Redirect::action('UserController@create');
        }

        return Redirect::route('signup');   

        }
    else {
        return 'No Session here';
    }
}

以下是我的路线:         Route :: get('signup',array('as'=>'signup','uses'=>'UserController @ create'));     Route :: post('signup',array('as'=>'signup','uses'=>'UserController @ store'));

出于某种原因,我认为它变得不必要复杂,我相信必须有另一种更简单和直接的方法来解决这个问题,而不是if语句和重定向到同一个控制器方法。

尽管如此,我想出了一些其他解决方案,例如只使用“注册”作为前缀,但我不喜欢这样。

 Route::group(array('prefix' => 'signup'), function() 
{
    Route::get('/', function(){
        return 'Yeab bababy yea';
    });
    Route::get('step1', array('as' => 'signup.step1', 'uses' => 'UserController@getStep1'));
    Route::post('step1', array('as' => 'signup.step1', 'uses' => 'UserController@postStep1'));
    Route::get('step2', array('as' => 'signup.step2', 'uses' => 'UserController@postStep2'));
    Route::post('step2', array('as' => 'signup.step2', 'uses' => 'UserController@postStep2'));
});

有没有办法完成任务,只使用一个路由而不使用clientide Javascript将变量存储在数据库中? (我对ajax没有经验)

目标应该是抓住电子邮件并仍然保持相同的路线,例如那些聪明的家伙,例如:

https://www.crazyegg.com/signup

我希望有办法。感谢您的帮助。

亲切的问候,

乔治

P.S。 现在凌晨1点在德国,所以如果我在接下来的几个小时没有回应评论,请不要生气,因为我现在要睡觉了。非常感谢你。

0 个答案:

没有答案