【问题标题】:Why this protected function create(Array $data) and not this protected function create(Request $data)?为什么这个受保护的函数 create(Array $data) 而不是这个受保护的函数 create(Request $data)?
【发布时间】:2020-12-22 07:14:13
【问题描述】:

我使用 laravel ui 脚手架创建了一个注册表单。

我做了什么:

• 在默认字段之外添加了一些字段

• 使用 auth 控制器专门 RegisterController 并由此更改部分 create 函数

protected function create(array $data)
{
    return User::create([
        'name' => $data['name'],
        'email' => $data['email'],
        'password' => Hash::make($data['password']),
    ]);
}

进入这个:

protected function create(array $data)
{
    return User::create([
        'user_email' => $data['email'],
        'user_Type' => $data['user_Type'],
        'username' => $data['username'],
        'password' => Hash::make($data['password']),
        'contact_number' => $data['contact_number'],
    ]);
}

但是用post方法提交表单后的结果是这样的:

参数计数错误 函数 App\Http\Controllers\Auth\RegisterController::create() 的参数太少,在第 54 行的 /Users/idan/Documents/SweetSurrender/vendor/laravel/framework/src/Illuminate/Routing/Controller.php 中传递了 0恰好是 1 个预期

Web.php

Route::get('/register', function() {
 return view('auth.register');
})->name('register');

Route::post('/register', [RegisterController::class, 'create']);

RegisterController.php

<?php

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use App\Providers\RouteServiceProvider;
use App\Models\User;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\Facades\Hash;
use Illuminate\Support\Facades\Validator;

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 registration.
     *
     * @var string
     */
    protected $redirectTo = RouteServiceProvider::HOME;

    /**
     * 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
     */
    public function index() {
        return view('auth.register');
    }

    protected function validator(array $data)
    {
        return Validator::make($data, [
            'username' => ['required', 'string', 'max:16'],
            'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
            'password' => ['required', 'string', 'min:8', 'confirmed'],
            'contact_number' => ['required', 'string', 'min:12', 'unique:users'],
        ]);
    }

    /**
     * Create a new user instance after a valid registration.
     *
     * @param  array  $data
     * @return \App\Models\User
     */
    protected function create(array $data)
    {
        return User::create([
            'user_email' => $data['email'],
            'user_Type' => $data['user_Type'],
            'username' => $data['username'],
            'password' => Hash::make($data['password']),
            'contact_number' => $data['contact_number'],
        ]);
    }
}

我也尝试在 RegisterController.php 中使用它

protected function create(Request $data)
{
    return User::create([
        'user_email' => $data->input('email'),
        'user_Type' => $data->input('user_Type'),
        'username' => $data->input('username'),
        'password' => Hash::make($data->input('password')),
        'contact_number' => $data->input('contact_number'),
    ]);
}

但它会导致错误:

照亮\数据库\查询异常 SQLSTATE[HY000]:一般错误:1364 字段“user_email”没有默认值(SQL:插入userspasswordupdated_atcreated_at)值($2y$10$vr7UasRBCzx2URQxLSWneuvr4Hl1at.q7qDk8UKWc /INjeHeYH7y, 2020-12-22 07:15:41, 2020-12-22 07:15:41))

【问题讨论】:

  • 你没有路由到create方法..你有一个register你路由到的方法,它调用create
  • 你的意思是在RegisterController中创建一个register方法并在里面调用create方法?
  • 你已经有了一个,RegistersUsers trait 为你提供了注册所需的所有方法
  • 特征的使用对我来说仍然是新事物,我只知道通过使用 RegistersUsers 包含 RegistersUsers 将允许控制器在不需要其他代码的情况下进行注册,但我对如何实现它感到困惑跨度>
  • 非常感谢,我学到了很多东西,并且对如何使用 laravel 脚手架有了一些线索。

标签: laravel


【解决方案1】:

我用同样的代码解决了这个问题:

protected function create(array $data)
{
    return User::create([
        'user_email' => $data['email'],
        'user_Type' => $data['user_Type'],
        'username' => $data['username'],
        'password' => Hash::make($data['password']),
        'contact_number' => $data['contact_number'],
    ]);
}

在用户模型中我包含了这个:

protected $fillable = [
    'username',
    'user_email',
    'password',
    'contact_number',
];

【讨论】:

    猜你喜欢
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 2013-08-04
    • 2016-04-07
    • 2022-12-20
    相关资源
    最近更新 更多