未定义的变量:user

时间:2015-01-15 07:31:40

标签: php laravel-4

我正在尝试使用激活码发送消息。我有一份登记表。表单将数据发送到控制器,控制器将数据保存到数据库中。但不知何故,在将数据保存到配置文件表后,它无法获取$ user变量。

这是我的控制器:

DB::transaction(function() use($first_name,$last_name,$email,
                                            $password,$address,$phone,$country_id,$state,$city,
                                            $zip_code,$skype,$birth_date,$code){

                //add info to user table
                $user = new User;
                    $user->username = $email;
                    $user->password = $password;
                    $user->email = $email;
                    $user->first_name = $first_name;
                    $user->last_name = $last_name;
                    $user->active = 0;
                    $user->code = $code;
                $user->save();






                //Get the user ID ceated just now
                $new_users = $new_user->id;






                // add information to Profile table

                $profile = new Profile;
                    $profile->user_id = $new_users;
                    $profile->phone = $phone;
                    $profile->address = $address;
                    $profile->country_id = 1;
                    $profile->state = $state;
                    $profile->skype = $skype;
                    $profile->city = $city;
                    $profile->zip_code = $zip_code;
                    $profile->birth_date = $birth_date;
                    $profile->timezone_id = 1;
                $profile->save();

            });//inside a transaction


            if($user){

                Mail::send('emails.welcome', 
                        array('link'=> URL::route('account-activate', $code),'user'=>$user->first_name),
                        function($message) use ($user) {
                            $message->to($user->email , $user->user)->from('admin@spandango.net')->subject('Active your account !');
                        }
                    );

                return Redirect::back()
                                ->with('message' , 'Your account is created ! Please check you email to activate your account !'); }



            return Redirect::to('/message');

我认为我的代码绝对正确。你能解释为什么它无法定义$ user变量吗?

4 个答案:

答案 0 :(得分:2)

这是因为$ user变量的范围。在 DB :: transaction(function(){})上面定义$ user;

答案 1 :(得分:1)

那是因为$ user在那个DB事务块内;它与关闭括号超出了范围。在交易上方定义它

答案 2 :(得分:1)

<强>解决方案

复制&amp;替换上面。

$user = false;
DB::transaction(function() use($first_name,$last_name,$email,
                                            $password,$address,$phone,$country_id,$state,$city,
                                            $zip_code,$skype,$birth_date,$code,$user){

    //add info to user table
    $user = new User;
    $user->username = $email;
    $user->password = $password;
    $user->email = $email;
    $user->first_name = $first_name;
    $user->last_name = $last_name;
    $user->active = 0;
    $user->code = $code;
    $user->save();

    //Get the user ID ceated just now
    $new_users = $new_user->id;

    // add information to Profile table

    $profile = new Profile;
    $profile->user_id = $new_users;
    $profile->phone = $phone;
    $profile->address = $address;
    $profile->country_id = 1;
    $profile->state = $state;
    $profile->skype = $skype;
    $profile->city = $city;
    $profile->zip_code = $zip_code;
    $profile->birth_date = $birth_date;
    $profile->timezone_id = 1;
    $profile->save();

});//inside a transaction


if($user){

    Mail::send('emails.welcome', 
            array('link'=> URL::route('account-activate', $code),'user'=>$user->first_name),
            function($message) use ($user) {
                $message->to($user->email , $user->user)->from('admin@spandango.net')->subject('Active your account !');
            }
        );

    return Redirect::back()
                    ->with('message' , 'Your account is created ! Please check you email to activate your account !'); }



return Redirect::to('/message');

答案 3 :(得分:1)

虽然定义了

$user = false;

上面

  

DB ::交易

可能现在可以做到这一点,但我不推荐它作为一个好的做法,最好的解决方案是使用

  

邮件::的send()

在数据库事务块中,您也可以改进代码,上面的代码应该是

DB::transaction(function() use($first_name,$last_name,$email,
                                        $password,$address,$phone,$country_id,$state,$city,
                                        $zip_code,$skype,$birth_date,$code,$user){

//add info to user table
$user = new User;
$user->username = $email;
$user->password = $password;
$user->email = $email;
$user->first_name = $first_name;
$user->last_name = $last_name;
$user->active = 0;
$user->code = $code;
$user->save();

//Get the user ID ceated just now
$new_users = $new_user->id;

// add information to Profile table

$profile = new Profile;
$profile->user_id = $new_users;
$profile->phone = $phone;
$profile->address = $address;
$profile->country_id = 1;
$profile->state = $state;
$profile->skype = $skype;
$profile->city = $city;
$profile->zip_code = $zip_code;
$profile->birth_date = $birth_date;
$profile->timezone_id = 1;
$profile->save();


if( !$profile || !$user )
{
return Redirect::back()
                ->with('message' , 'Your account is created ! Please check you email to activate your account !');
} else {
// Else commit the queries

Mail::send('emails.welcome', 
        array('link'=> URL::route('account-activate', $code),'user'=>$user->first_name),
        function($message) use ($user) {
            $message->to($user->email , $user->user)->from('admin@spandango.net')->subject('Active your account !');
        }
    );
}

});//inside a transaction