我正在使用codeigniter盾授权和登录系统。我正在尝试,按照官方指南,插入一个自定义用户字段。可能有一些步骤我不清楚,或者我没有正确执行,因为当我注册一个新用户时,新的自定义字段没有存储在用户表中。
这里我的代码.自定义字段名称是“cellularare”
我肯定我漏掉了一个步骤,但我不知道是哪一个。感谢所有帮助我理解这个问题的人。
迁移
<?php
namespace App\Database\Migrations;
use CodeIgniter\Database\Forge;
use CodeIgniter\Database\Migration;
class AddMobileNumberToUsers extends Migration
{
/**
* @var string[]
*/
private array $tables;
public function __construct(?Forge $forge = null)
{
parent::__construct($forge);
/** @var \Config\Auth $authConfig */
$authConfig = config('Auth');
$this->tables = $authConfig->tables;
}
public function up()
{
$fields = [
'cellulare' => ['type' => 'VARCHAR', 'constraint' => '20', 'null' => true],
];
$this->forge->addColumn($this->tables['users'], $fields);
}
public function down()
{
$fields = [
'cellulare',
];
$this->forge->dropColumn($this->tables['users'], $fields);
}
}
字符串
UserModel.php
<?php
declare(strict_types=1);
namespace App\Models;
use CodeIgniter\Shield\Models\UserModel as ShieldUserModel;
class UserModel extends ShieldUserModel
{
protected function initialize(): void
{
parent::initialize();
$this->allowedFields = [
...$this->allowedFields,
'cellulare',
];
}
}
型
Validation.php
<?php
namespace Config;
use CodeIgniter\Config\BaseConfig;
use CodeIgniter\Validation\StrictRules\CreditCardRules;
use CodeIgniter\Validation\StrictRules\FileRules;
use CodeIgniter\Validation\StrictRules\FormatRules;
use CodeIgniter\Validation\StrictRules\Rules;
class Validation extends BaseConfig
{
// --------------------------------------------------------------------
// Setup
// --------------------------------------------------------------------
/**
* Stores the classes that contain the
* rules that are available.
*
* @var string[]
*/
public array $ruleSets = [
Rules::class,
FormatRules::class,
FileRules::class,
CreditCardRules::class,
];
/**
* Specifies the views that are used to display the
* errors.
*
* @var array<string, string>
*/
public array $templates = [
'list' => 'CodeIgniter\Validation\Views\list',
'single' => 'CodeIgniter\Validation\Views\single',
];
// --------------------------------------------------------------------
// Rules
// --------------------------------------------------------------------
public $registration = [
'username' => [
'label' => 'Auth.username',
'rules' => [
'required',
'max_length[30]',
'min_length[3]',
'regex_match[/\A[a-zA-Z0-9\.]+\z/]',
'is_unique[users.username]',
],
],
'cellulare' => [
'label' => 'cellulare',
'rules' => [
'max_length[20]',
'min_length[10]',
'regex_match[/\A[0-9]+\z/]',
'is_unique[users.cellulare]',
],
],
'email' => [
'label' => 'Auth.email',
'rules' => [
'required',
'max_length[254]',
'valid_email',
'is_unique[auth_identities.secret]',
],
],
'password' => [
'label' => 'Auth.password',
'rules' => [
'required',
'max_byte[72]',
'strong_password[]',
],
'errors' => [
'max_byte' => 'Auth.errorPasswordTooLongBytes',
]
],
'password_confirm' => [
'label' => 'Auth.passwordConfirm',
'rules' => 'required|matches[password]',
],
];
}
型
1条答案
按热度按时间flmtquvp1#
发现问题!在auth.php中,我更改了以下内容:
public string $userProvider = UserModel::class;
对此:
public string $userProvider = \App\Models\UserModel::class;