【问题标题】:Getting User::create() not found in Laravel 5.5在 Laravel 5.5 中找不到 User::create()
【发布时间】:2019-09-17 17:08:07
【问题描述】:

当我尝试注册用户时,出现错误:

Call to undefined method App\Models\User::create()

这是我的用户模型:

<?php

namespace App\Models;

use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User
{
use Notifiable;

/**
 * The attributes that are mass assignable.
 *
 * @var array
 */
protected $fillable = [
    'first_name', 'last_name', 'email', 'password',
];

/**
 * The attributes that should be hidden for arrays.
 *
 * @var array
 */
protected $hidden = [
    'password', 'remember_token',
];

protected $table = 'users';

}

我使用了 Laravel 5.5 附带的 User 模型,但只是将它移到了 Models 文件夹中。我更新了 config/auth 文件以指向 App\Models\User。我已经运行了 php artisan optimize 和 composer dump-autoload 几次,但无济于事。

这是我的注册控制器:

<?php
namespace App\Http\Controllers\Auth;

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

class RegisterController extends Controller {

public $titles = [];

public $title = 'Registration';

use RegistersUsers;

/**
 * Where to redirect users after registration.
 *
 * @var string
 */
protected $redirectTo = '/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
 */
protected function validator(array $data)
{
    return Validator::make($data, [
        'first_name' => 'required|string|max:255',
        'last_name' => 'required|string|max:255',
        'email' => 'required|string|email|max:255|unique:users',
        'password' => 'required|string|min:6|confirmed',
    ]);
}

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

public function showRegistrationForm() {
    return view('auth.register')
      ->with('env', $this->env)
      ->with('titles', $this->titles)
      ->with('title', $this->title);
}
}

【问题讨论】:

  • 为什么不从 Auth\User 扩展 User 类?您包含命名空间但没有使用它。
  • @HugoDias 去做你的回答,我会把它标记为正确的。谢谢!

标签: php laravel-5 registration


【解决方案1】:

从 Auth 包中扩展 Laravel User 模型时,您应该从该包中扩展 User 类。包中的抽象类扩展了模型,然后您将可以访问所有模型方法。

来自 Illuminate\Foundation\Auth\User:

class User extends Model implements
   AuthenticatableContract,
   AuthorizableContract,
   CanResetPasswordContract
{
   use Authenticatable, Authorizable, CanResetPassword;
}

【讨论】:

    猜你喜欢
    • 2018-09-03
    • 2018-03-08
    • 1970-01-01
    • 2018-07-10
    • 1970-01-01
    • 2014-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多