Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Laravel 5.3中注册新类型的用户_Laravel_Laravel 5_Laravel 5.3 - Fatal编程技术网

在Laravel 5.3中注册新类型的用户

在Laravel 5.3中注册新类型的用户,laravel,laravel-5,laravel-5.3,Laravel,Laravel 5,Laravel 5.3,我试图在laravel中创建两种类型的用户,我有两个表。我想使用从laravel定义的register view和controller,但当我注册新用户时,它只保存在第一个表中 问题是这个url('/register')在这里我不知道如何编辑这个url来发送post请求,因为我使用两个表单,一个用于第一类用户,另一个用于第二类用户 这是第一个控制器: <?php namespace App\Http\Controllers\Auth; use App\User; use Validat

我试图在laravel中创建两种类型的用户,我有两个表。我想使用从laravel定义的register view和controller,但当我注册新用户时,它只保存在第一个表中

问题是这个
url('/register')
在这里
我不知道如何编辑这个url来发送post请求,因为我使用两个表单,一个用于第一类用户,另一个用于第二类用户

这是第一个控制器:

<?php

namespace App\Http\Controllers\Auth;

use App\User;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/index';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
            'first_name' => 'required|max:255',
            'last_name' => 'required|max:255',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return User::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
        ]);
    }
}
<?php

namespace App\Http\Controllers\Auth;

use App\Merchant;
use Validator;
use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\RegistersUsers;

class RegisterMerchantController extends Controller
{
    /*
    |--------------------------------------------------------------------------
    | Register Controller
    |--------------------------------------------------------------------------
    |
    | This controller handles the registration of new users as well as their
    | validation and creation. By default this controller uses a trait to
    | provide this functionality without requiring any additional code.
    |
    */

    use RegistersUsers;

    /**
     * Where to redirect users after login / registration.
     *
     * @var string
     */
    protected $redirectTo = '/index';

    /**
     * Create a new controller instance.
     *
     * @return void
     */
    public function __construct()
    {
        $this->middleware('guest');
    }

    /**
     * Get a validator for an incoming registration request.
     *
     * @param  array  $data
     * @return \Illuminate\Contracts\Validation\Validator
     */
    protected function validator(array $data)
    {
        return Validator::make($data, [
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:6|confirmed',
            'first_name' => 'required|max:255',
            'last_name' => 'required|max:255',
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return User
     */
    protected function create(array $data)
    {
        return Merchant::create([
            'name' => $data['name'],
            'email' => $data['email'],
            'password' => bcrypt($data['password']),
            'first_name' => $data['first_name'],
            'last_name' => $data['last_name'],
        ]);
    }
}

有几种方法可以解决这个问题。其中之一是使用
register.blade.php
中的用户类型隐藏字段,并基于该字段在注册控制器中登录以验证输入

<input type="hidden" name="user_type" id="user_type" value="user">
如果将用户保存到同一个表中并使用 区分两者。这项技术 还将帮助您对用户进行身份验证,因为您可以对用户进行身份验证 通过引用单个表(
用户

因此,您的表结构如下所示:

- users
    - id
    - owner_id
    - owner_type
    - email
    - password
    - token
    - ...

- clients
    - id
    - name
    - gender
    - mobile
    - ...

- merchants
    - id
    - name
    - gender
    - mobile
    - ...
class User extends Model
{
    public function owner()
    {
        return $this->morphTo();
    }
}

class Client extends Model
{
    public function user()
    {
        return $this->morphOne(User::class, 'owner');
    }
}

class Merchant extends Model
{
    public function user()
    {
        return $this->morphOne(User::class, 'owner');
    }
}
class RegisterController extends Controller
{

    public function register()
    {
        // You should use validator here to validate your inputs here...
        $inputs = request()->except('_token');

        if($inputs['type'] == 1) {
            $profile = Client::create(array_only($inputs, ['mobile, 'gender', 'name']));
        } else {
            $profile = Merchant::create(array_only($inputs, ['mobile, 'gender', 'name']));
        }

        $user_inputs_arr = array_only($inputs, ['email', 'password']);
        $user_inputs_arr['password'] = bcrypt($inputs['password']);

        $user = $profile->user()->create($user_inputs_arr);
        // Hence your client is registered successfully...
    }

}
您的模型-
客户机
用户
商户
如下所示:

- users
    - id
    - owner_id
    - owner_type
    - email
    - password
    - token
    - ...

- clients
    - id
    - name
    - gender
    - mobile
    - ...

- merchants
    - id
    - name
    - gender
    - mobile
    - ...
class User extends Model
{
    public function owner()
    {
        return $this->morphTo();
    }
}

class Client extends Model
{
    public function user()
    {
        return $this->morphOne(User::class, 'owner');
    }
}

class Merchant extends Model
{
    public function user()
    {
        return $this->morphOne(User::class, 'owner');
    }
}
class RegisterController extends Controller
{

    public function register()
    {
        // You should use validator here to validate your inputs here...
        $inputs = request()->except('_token');

        if($inputs['type'] == 1) {
            $profile = Client::create(array_only($inputs, ['mobile, 'gender', 'name']));
        } else {
            $profile = Merchant::create(array_only($inputs, ['mobile, 'gender', 'name']));
        }

        $user_inputs_arr = array_only($inputs, ['email', 'password']);
        $user_inputs_arr['password'] = bcrypt($inputs['password']);

        $user = $profile->user()->create($user_inputs_arr);
        // Hence your client is registered successfully...
    }

}
现在,在HTML表单中,您可以添加一个
选择
选项来选择要创建的用户类型(或者您可以借助
隐藏字段
来实现它),出于演示目的,我使用了一个选择选项:

<form action="{{ route('register_route_name') }}" method="POST">
    {{ csrf_field() }}
    <select name="type">
        <option disabled> Select Type of User </option>
        <option value="1"> Client </option>
        <option value="2"> Merchant </option>
    </select>

    <input type="text" name="name">
    <input type="text" name="mobile">

    <input type="radio" name="gender" value="0"> Male
    <input type="radio" name="gender" value="1"> Female

    <input type="email" name="email">
    <input type="password" name="password">

    <input type="submit" value="Register">

</form>

希望这有帮助

您可以发布您的
注册控制器
以便我们能更好地帮助您吗?请放置路线代码here@melanholly我编辑question@AddWebSolutionPvtLtd我没有这个控制器的路由代码,因为laravel 5.3已经定义了寄存器,您不必创建路由为什么客户端模型是所有者模型,我认为用户模式应该是所有者?根据我的理解,客户是
用户
商家
的共同模式,完全由你决定,你可以根据自己的可行性进行更改,这没有什么硬性规定:DNo你不明白我的问题,我想要两种类型的用户,客户和商家(客户和商家是两个不同的表),而不是只有一个用户表。这就是为什么我对你的答案感到困惑的原因。我想你没有正确地理解我,顺便说一下,我已经根据你的理解更新了上面的答案。现在将
用户
作为一个常用表…我现在就试试,稍后再给你反馈