如何在CodeIgniter 4 Shield中添加自定义用户字段并正确处理?
在CodeIgniter 4 Shield中添加自定义用户属性的完整实现步骤
1. 扩展用户数据库表
先给users表添加自定义字段(比如first_name、last_name),通过迁移文件实现:
<?php namespace App\Database\Migrations; use CodeIgniter\Database\Migration; class AddCustomUserFields extends Migration { public function up() { $this->forge->addColumn('users', [ 'first_name' => [ 'type' => 'VARCHAR', 'constraint' => 100, 'null' => false, ], 'last_name' => [ 'type' => 'VARCHAR', 'constraint' => 100, 'null' => false, ], ]); } public function down() { $this->forge->dropColumn('users', ['first_name', 'last_name']); } }
执行迁移命令:php spark migrate
2. 自定义User模型
继承Shield的默认UserModel,扩展字段权限:
<?php namespace App\Models; use CodeIgniter\Shield\Models\UserModel as ShieldUserModel; class UserModel extends ShieldUserModel { // 将自定义字段加入允许操作的列表 protected $allowedFields = [ 'username', 'email', 'password_hash', 'reset_hash', 'reset_at', 'reset_expires', 'activate_hash', 'status', 'status_message', 'active', 'last_active', 'force_pass_reset', 'first_name', 'last_name', ]; }
然后在app/Config/Auth.php中替换默认模型:
public $userModel = \App\Models\UserModel::class;
3. 处理用户创建/注册逻辑
创建用户时直接传入自定义字段即可:
$user = auth()->getProvider()->create([ 'email' => 'test@example.com', 'password' => 'secure123', 'first_name' => 'John', 'last_name' => 'Doe', ]);
如果用表单注册,需要在验证规则中添加字段校验(比如app/Config/Validation.php):
public $registration = [ 'email' => 'required|valid_email|is_unique[users.email]', 'password' => 'required|min_length[8]', 'first_name' => 'required|min_length[2]|max_length[100]', 'last_name' => 'required|min_length[2]|max_length[100]', ];
在注册控制器中获取表单字段并传入创建逻辑即可。
4. 访问自定义属性
登录后直接通过auth()实例访问:
// 获取当前登录用户的自定义字段 $firstName = auth()->user()->first_name; $lastName = auth()->user()->last_name; // 查询指定用户的自定义属性 $userModel = model(UserModel::class); $targetUser = $userModel->find(1); echo $targetUser->last_name;
5. 更新自定义属性
更新时直接填充字段后保存:
auth()->user()->fill([ 'first_name' => 'Jane', 'last_name' => 'Smith', ])->save();
注意:必须确保自定义字段被添加到模型的
$allowedFields中,否则模型会忽略字段的写入操作。
内容的提问来源于stack exchange,提问作者Bünyamin Pollin
相关产品推荐
相关产品推荐

