大家好,我被困了。
我想在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点在德国,所以如果我在接下来的几个小时没有回应评论,请不要生气,因为我现在要睡觉了。非常感谢你。