Php 使用登录表单存储数据(针对每个用户)-Laravel 5.7

Php 使用登录表单存储数据(针对每个用户)-Laravel 5.7,php,laravel,laravel-5.7,Php,Laravel,Laravel 5.7,我正在建立一个有几个“区域”的网站,使其易于理解。 用户将在登录表单中选择他们想要进入的任何区域,他们可以进入他们想要进入的任何区域,但只能在登录时进行选择 我想在默认用户登录时,以相同的形式将区域存储在默认用户表中(尽管据我所知,登录表单没有存储任何内容) 我不知道我需要编辑什么文件,它们必须是核心文件 我试图修改默认控制器,但没有成功。在以前的laravel版本中,它们似乎没有那么隐蔽 Table users (default table used in Laravel for User

我正在建立一个有几个“区域”的网站,使其易于理解。 用户将在登录表单中选择他们想要进入的任何区域,他们可以进入他们想要进入的任何区域,但只能在登录时进行选择



我想在默认用户登录时,以相同的形式将区域存储在默认用户表中(尽管据我所知,登录表单没有存储任何内容)

我不知道我需要编辑什么文件,它们必须是核心文件

我试图修改默认控制器,但没有成功。在以前的laravel版本中,它们似乎没有那么隐蔽

Table users (default table used in Laravel for Users/Auth/Login)
-id
-name
-email
-password
-zone (NEW FIELD)

每次用户登录时,完全有必要修改“区域”字段,因为整个网站将根据
app/Http/Controllers/Auth/RegisterController.php文件中的该值而改变

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'zone' => $data['zone']
    ]);
}
别忘了在上面的方法验证器中包含
区域

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ]);
}
然后,当用户登录时,方法
authenticated
运行

protected function authenticated(Request $request, $user)
{
    // Store Zone In session HERE
}

希望这有帮助。如果您在
app/Http/Controllers/Auth/RegisterController.php
文件中发现此答案有帮助,请随意投票

/**
 * Create a new user instance after a valid registration.
 *
 * @param  array  $data
 * @return \App\User
 */
protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
        'zone' => $data['zone']
    ]);
}
别忘了在上面的方法验证器中包含
区域

protected function validator(array $data)
{
    return Validator::make($data, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => ['required', 'string', 'min:6', 'confirmed'],
    ]);
}
然后,当用户登录时,方法
authenticated
运行

protected function authenticated(Request $request, $user)
{
    // Store Zone In session HERE
}

希望这有帮助。如果您觉得这个答案很有帮助,请随意向上投票

假设您的区域下拉列表的名称是
zone
,然后在
app/Http/Controllers/Auth/LoginController.php中粘贴以下内容:

/**
*验证用户登录请求。
*
*@param\light\Http\Request$Request
*@返回无效
*
*@throws\light\Validation\ValidationException
*/
受保护函数validateLogin(请求$Request)
{
$request->validate([
$this->username()=>“必需|字符串”,
“密码”=>“必需|字符串”,
“zone'=>”必需|在:zone_1、zone_2、zone_3',//所有可能的分区
]);
}
/**
*用户已通过身份验证。
*
*@param\light\Http\Request$Request
*@param混合$user
*@返回混合
*/
已验证的受保护函数(请求$Request,$user)
{
$user->zone=$request->zone;//更新用户中的区域
$user->save();//保存用户
}

假设区域下拉列表的名称为
zone
,然后在
app/Http/Controllers/Auth/LoginController.php中粘贴以下内容:

/**
*验证用户登录请求。
*
*@param\light\Http\Request$Request
*@返回无效
*
*@throws\light\Validation\ValidationException
*/
受保护函数validateLogin(请求$Request)
{
$request->validate([
$this->username()=>“必需|字符串”,
“密码”=>“必需|字符串”,
“zone'=>”必需|在:zone_1、zone_2、zone_3',//所有可能的分区
]);
}
/**
*用户已通过身份验证。
*
*@param\light\Http\Request$Request
*@param混合$user
*@返回混合
*/
已验证的受保护函数(请求$Request,$user)
{
$user->zone=$request->zone;//更新用户中的区域
$user->save();//保存用户
}

下面的函数在哪个文件中进行身份验证?我找不到。此外,用户在注册时不会选择或设置区域。仅在登录时。下面的函数在哪个文件中进行身份验证?我找不到。此外,用户在注册时不会选择或设置区域。只有在登录时。如果我从表中获取区域名称(我就是这么做的),并且这些区域不断增加,会怎么样?登录控制器上的下拉菜单已经工作并获取表的数据。您可以在模型上创建一个名为
zones()
的方法,然后
return Zone::pulk('title')->toArray()
(如果您有一个区域模型?)然后在验证中使用它作为(\App\User::zones())中的规则::in(\App\User::zones())
(我使用了标题,不确定您的区域表是什么样子?@Josep Feixas不明白还是什么?嗨,这是周末,所以我停了两天:)抱歉,这给了我一个错误。传递给App\Http\Controllers\Auth\LoginController::validateLogin()的参数1必须是App\Http\Controllers\Auth\Request的实例,light\Http\Request的实例giveedIt:是的,它现在可以工作了,我需要在LoginController.php文件上方添加“use light\Http\Request;”。谢谢你,投了赞成票!如果我从表中取区域名称(我就是这么做的),并且这些区域不断增加,会怎么样?登录控制器上的下拉菜单已经工作并获取表的数据。您可以在模型上创建一个名为
zones()
的方法,然后
return Zone::pulk('title')->toArray()
(如果您有一个区域模型?)然后在验证中使用它作为(\App\User::zones())中的规则::in(\App\User::zones())
(我使用了标题,不确定您的区域表是什么样子?@Josep Feixas不明白还是什么?嗨,这是周末,所以我停了两天:)抱歉,这给了我一个错误。传递给App\Http\Controllers\Auth\LoginController::validateLogin()的参数1必须是App\Http\Controllers\Auth\Request的实例,light\Http\Request的实例giveedIt:是的,它现在可以工作了,我需要在LoginController.php文件上方添加“use light\Http\Request;”。谢谢你,投了赞成票!