在Laravel 5.3中注册新类型的用户
我试图在laravel中创建两种类型的用户,我有两个表。我想使用从laravel定义的register view和controller,但当我注册新用户时,它只保存在第一个表中 问题是这个在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
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你不明白我的问题,我想要两种类型的用户,客户和商家(客户和商家是两个不同的表),而不是只有一个用户表。这就是为什么我对你的答案感到困惑的原因。我想你没有正确地理解我,顺便说一下,我已经根据你的理解更新了上面的答案。现在将用户
作为一个常用表…我现在就试试,稍后再给你反馈