Php Laravel-如何使用Laravel在另一个控制器中提供的AuthController注册新用户

Php Laravel-如何使用Laravel在另一个控制器中提供的AuthController注册新用户,php,laravel,authentication,Php,Laravel,Authentication,因此,我正在构建一个签出功能。如果用户是来宾,他可以使用他的凭据按照他下的订单进行新的注册。我已经使用了Laravel提供的auth scaffold,并使用了php artisan make:auth命令。我有一个OrdersController和框架附带的AuthController。如何在OrdersController中注册新用户?这是我的密码: checkout.blade.php: <li class="col-md-12 col-sm-12"> <h4&g

因此,我正在构建一个签出功能。如果用户是来宾,他可以使用他的凭据按照他下的订单进行新的注册。我已经使用了Laravel提供的auth scaffold,并使用了php artisan make:auth命令。我有一个OrdersController和框架附带的AuthController。如何在OrdersController中注册新用户?这是我的密码: checkout.blade.php:

<li class="col-md-12 col-sm-12">
    <h4>Register</h4>

    <input id="create-act" type="checkbox" class="input-chkbox" name="register">
    <label for="create-act">Create user account?</label>
</li>
<li class="col-md-12 col-sm-12 create-account">

    <label for="password">Password<em>*</em></label>
    <input required type="text" class="input-text" id="password"
           name="password">
</li>
<li class="col-md-12 col-sm-12 create-account">
    <label for="password_confirmation">Confirm Password<em>*</em></label>
    <input required type="text" class="input-text"
           id="password_confirmation"
           name="password_confirmation">
</li>
我想在此if中注册新用户。我该怎么做

编辑:这是在AuthController中创建的受保护函数

protected function create(array $data)
{
    $confirmationCode = str_random(30);

    $user = User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => bcrypt($data['password']),
        'confirmation_code' => $confirmationCode
    ]);

    $user->roles()->attach(Role::where('name', 'Customer')->first());
    $cart = new Cart();
    $cart->user_id = $user->id;
    $cart->save();
    if(Session::has('cartItems')) {
        foreach (Session::get('cartItems') as $sessionCartItem) {
            $cartItem = new CartItem();
            $cartItem->product_id = $sessionCartItem['product']->id;
            $cartItem->cart_id = $cart->id;
            $cartItem->size = $sessionCartItem['size'];
            $cartItem->quantity = $sessionCartItem['quantity'];
            $cartItem->save();
        }
    }

    Session::flush();
    $cart->save();

    $email = $user['email'];
    $name = $user['name'];

    Mail::send('auth.emails.user-confirmation', ['name' => $name, 'confirmation_code' => $user['confirmation_code']], function ($message) use ($email, $name) {
        $message->from('mymail@gmail.com', 'Name Family')->to($email, $name)->subject('Confirm email');
    });

    return $user;
}

AuthController执行一个简单的User::create$data;验证完成后。也可以选择执行Auth::guard->login$user;它将自动登录新创建的用户。

AuthController执行一个简单的用户::create$data;验证完成后。也可以选择执行Auth::guard->login$user;将自动登录新创建的用户。

通常,您可以通过请求轻松创建用户:

$user = User::create($request->all());
确保$request变量与users表的列匹配

编辑:从另一个控制器调用函数:

class OrdersController extends AuthController
{
    ...
    $this->create(...);
}

通常,您可以通过请求轻松创建用户:

$user = User::create($request->all());
确保$request变量与users表的列匹配

编辑:从另一个控制器调用函数:

class OrdersController extends AuthController
{
    ...
    $this->create(...);
}

验证成功后 从$request中取出用户表所需的所有数据, 使用用户模型插入列

你可以用

$user=User::create($dataObject);
$user=User::insert([
'username'=>$request->username,
'password'=>Hash::make($request->password)
]);
或者你可以使用

$user=User::create($dataObject);
$user=User::insert([
'username'=>$request->username,
'password'=>Hash::make($request->password)
]);
然后,您可以使用Auth-Guard方法登录用户

Auth::login($user);
return;
编辑:创建一个库函数并在任何需要的地方使用它

<?php

namespace App\Lib\User;

class Creator
{
    public function create(Request $request)
    {
       // do what you want
      // return what you want
    }
}

验证成功后 从$request中取出用户表所需的所有数据, 使用用户模型插入列

你可以用

$user=User::create($dataObject);
$user=User::insert([
'username'=>$request->username,
'password'=>Hash::make($request->password)
]);
或者你可以使用

$user=User::create($dataObject);
$user=User::insert([
'username'=>$request->username,
'password'=>Hash::make($request->password)
]);
然后,您可以使用Auth-Guard方法登录用户

Auth::login($user);
return;
编辑:创建一个库函数并在任何需要的地方使用它

<?php

namespace App\Lib\User;

class Creator
{
    public function create(Request $request)
    {
       // do what you want
      // return what you want
    }
}

我不希望我的OrdersController扩展我的AuthController,我懒得将身份验证逻辑提取到库中,如果选中了register复选框,则只重定向不起作用。我只是决定在OrdersController中复制部分注册逻辑。这肯定不是一个好的做法,但在我将登录信息解压缩到库中之前,这是一个解决办法。代码如下:

if (isset($_POST['register'])) {
    $this->validate($request, [
       'password' => 'required|min:6|confirmed',
       'password_confirmation' => 'required'
    ]);

    $user = User::create([
        'name' => $request['name'],
        'email' => $request['email'],
        'password' => bcrypt($request['password']),
        'phone_number' => $request['phone']
    ]); 
}

我不希望我的OrdersController扩展我的AuthController,我懒得将身份验证逻辑提取到库中,如果选中了register复选框,则只重定向不起作用。我只是决定在OrdersController中复制部分注册逻辑。这肯定不是一个好的做法,但在我将登录信息解压缩到库中之前,这是一个解决办法。代码如下:

if (isset($_POST['register'])) {
    $this->validate($request, [
       'password' => 'required|min:6|confirmed',
       'password_confirmation' => 'required'
    ]);

    $user = User::create([
        'name' => $request['name'],
        'email' => $request['email'],
        'password' => bcrypt($request['password']),
        'phone_number' => $request['phone']
    ]); 
}


为什么要重新实施?为什么不使用已经注册用户的现有控制器,只需将重定向更改为您的签出?因为我还需要能够在我的注册页面中注册用户。您不必永久更改默认重定向。仅当reg请求来自签出时。@apokryfos我的注册方法需要request$request才能工作。我得到addOrder方法的请求,我需要将$request传递给重定向。我该怎么做呢?事实上,既然您已经更新了这个问题,那么在AuthController公共静态中创建函数并从OrderController调用它可能要容易得多。当然,如果您将其移动到库中,而不是将其作为控制器方法,这会更好,因为它更多的是业务逻辑而不是控制器逻辑。为什么要重新实现它?为什么不使用已经注册用户的现有控制器,只需将重定向更改为您的签出?因为我还需要能够在我的注册页面中注册用户。您不必永久更改默认重定向。仅当reg请求来自签出时。@apokryfos我的注册方法需要request$request才能工作。我得到addOrder方法的请求,我需要将$request传递给重定向。我该怎么做呢?事实上,既然您已经更新了这个问题,那么在AuthController公共静态中创建函数并从OrderController调用它可能要容易得多。当然,如果你把它移到一个库中,而不是把它作为一个控制器方法,那会更好,因为它更多的是业务逻辑,而不是控制器逻辑。我已经更新了我的问题。检查AuthController中的创建方法。在那里我附加角色并发送确认电子邮件。如何从我的OrdersController访问该方法,而不是使用User::create$data?您不能在中使用一个类的受保护函数来访问其他类,除非您对其进行扩展,而不是使用controller的相同函数在不同的文件夹中创建一个单独的类,请在两个order cont中使用该类
roller和auth controller我在应用程序中的做法是,我在应用程序文件夹中有一个librar文件夹,其中我有一个用户文件夹,其中我有文件creator.php和updater.php creator.php由一个类和一个创建用户的函数组成,我只是在任何控制器中使用这个类,并调用这个函数。我已经更新了我的问题。检查AuthController中的创建方法。在那里我附加角色并发送确认电子邮件。如何从我的OrdersController访问该方法,而不是使用User::create$data?您不能在中使用类的受保护函数,除非您扩展它,而不是使用controller的相同函数在不同文件夹中创建单独的类,在order controller和auth controller中使用该类,就像我在应用程序中所做的那样,我在应用程序文件夹中有一个librar文件夹,其中我有一个user文件夹,其中我必须创建creator.php和updater.php creator.php文件,其中包括一个类和一个创建用户的函数,我只是在任何控制器中使用这个类,并调用这个函数。我已经更新了我的问题。检查AuthController中的创建方法。在那里我附加角色并发送确认电子邮件。如何从OrdersController访问该方法,而不是使用User::create$data?@Codearts只是扩展了AuthController,您可以调用函数create。查看我的编辑。我已更新我的问题。检查AuthController中的创建方法。在那里我附加角色并发送确认电子邮件。如何从OrdersController访问该方法,而不是使用User::create$data?@Codearts只是扩展了AuthController,您可以调用函数create。查看我的编辑。我已更新我的问题。检查AuthController中的创建方法。在那里我附加角色并发送确认电子邮件。如何从OrdersController访问该方法,而不是使用User::create$data?我已经更新了我的问题。检查AuthController中的创建方法。在那里我附加角色并发送确认电子邮件。如何从OrdersController访问该方法,而不是使用User::create$data?