首页 > 其他分享 >yii2 模型

yii2 模型

时间:2024-03-30 11:56:56浏览次数:18  
标签:yii2 验证 模型 echo user password email User

yii2 模型

Yii2的模型(Model)是MVC(Model-View-Controller)设计模式中的一部分,它代表业务数据、规则和逻辑的对象。模型通常用于处理与数据相关的业务逻辑,如数据的验证、访问和修改等。

模型示例代码

<?php  
  
namespace app\models;  
  
use Yii;  
use yii\db\ActiveRecord;  
  
/**  
 * User模型  
 *  
 * @property int $id  
 * @property string $username  
 * @property string $email  
 * @property string $password_hash  
 */  
class User extends ActiveRecord  
{  
    /**  
     * 返回与这个类关联的数据库表名  
     *  
     * @return string  
     */  
    public static function tableName()  
    {  
        return 'user'; // 对应的数据库表名  
    }  
  
    /**  
     * 返回此模型的属性标签  
     *  
     * @return array  
     */  
    public function attributeLabels()  
    {  
        return [  
            'id' => 'ID',  
            'username' => '用户名',  
            'email' => '邮箱',  
            'password_hash' => '密码',  
        ];  
    }  
  
    /**  
     * 验证规则  
     *  
     * @return array  
     */  
    public function rules()  
    {  
        return [  
            [['username', 'email', 'password_hash'], 'required'],  
            ['email', 'email'],  
            ['username', 'unique', 'targetClass' => '\app\models\User', 'message' => '该用户名已存在。'],  
            // 其他验证规则...  
        ];  
    }  
  
    /**  
     * 在保存之前,密码需要被哈希处理  
     *  
     * @return bool  
     */  
    public function beforeSave($insert)  
    {  
        if (parent::beforeSave($insert)) {  
            if (!$this->isNewRecord) {  
                $this->password_hash = Yii::$app->security->generatePasswordHash($this->password_hash);  
            }  
            return true;  
        }  
        return false;  
    }  
  
    // ... 其他模型方法,如自定义查询方法、关联定义等  
}

操作模型

创建记录

    // 查找一个用户  
    $user = User::findOne($id);  
      
    // 创建一个新用户  
    $newUser = new User();  
    $newUser->username = 'example';  
    $newUser->email = '[email protected]';  
    $newUser->password_hash = Yii::$app->security->generatePasswordHash('password123');  
    $newUser->save(); // 保存用户到数据库  
      
    // 验证模型数据  
    if ($newUser->load(Yii::$app->request->post()) && $newUser->save()) {  
        // 保存成功  
    } else {  
        // 验证失败,显示错误信息  
    }

读取记录

// 读取单个记录  
$user = User::findOne(1); // 通过主键ID读取  
if ($user) {  
    echo $user->name;  
} else {  
    echo 'User not found.';  
}  
  
// 读取多个记录  
$users = User::find()->all(); // 读取所有用户  
foreach ($users as $user) {  
    echo $user->name . '<br>';  
}  
  
// 根据条件读取记录  
$users = User::find()  
    ->where(['status' => 'active'])  
    ->orderBy('created_at DESC')  
    ->limit(10)  
    ->all();

更新记录

// 加载要更新的记录  
$user = User::findOne(1);  
if ($user) {  
    $user->name = 'New Name';  
    $user->email = '[email protected]';  
  
    // 保存更新到数据库  
    if ($user->save()) {  
        echo 'User updated successfully!';  
    } else {  
        echo 'Failed to update user.';  
    }  
} else {  
    echo 'User not found.';  
}

删除记录

// 删除指定ID的用户  
$user = User::findOne(1);  
if ($user) {  
    if ($user->delete()) {  
        echo 'User deleted successfully!';  
    } else {  
        echo 'Failed to delete user.';  
    }  
} else {  
    echo 'User not found.';  
}  
  
// 根据条件删除多个记录  
User::deleteAll(['status' => 'inactive']); // 删除所有状态为inactive的用户

验证规则

<?php  
  
namespace app\models;  
  
use yii\base\Model;  
  
class MyForm extends Model  
{  
    public $name;  
    public $email;  
    public $password;  
  
    /**  
     * @return array the validation rules.  
     */  
    public function rules()  
    {  
        return [  
            // name字段是必填项  
            ['name', 'required'],  
            // name字段的长度应在3到255个字符之间  
            ['name', 'string', 'min' => 3, 'max' => 255],
            // email字段是必填项,并且必须是有效的电子邮件地址
            ['email', 'required'],
            ['email', 'email'],
            
            // password字段是必填项,并且长度应在6到255个字符之间
            ['password', 'required'],
            ['password', 'string', 'min' => 6, 'max' => 255],
            
            // 自定义验证规则
            ['password', 'validatePassword']
        ];
    }
    
    /**
    * 自定义验证器方法
    *
    * @param string $attribute 属性名
    * @param mixed $params 验证参数
    */
    public function validatePassword($attribute, $params)
    {
        if (!$this->hasErrors()) { // 如果之前没有错误,才执行自定义验证
            // 这里添加自定义验证逻辑,例如检查密码复杂度等
            if (!preg_match('/[a-z]/', $this->password) || !preg_match('/[A-Z]/', $this->password) || !preg_match('/\d/', $this->password)) {
                $this->addError($attribute, '密码必须包含至少一个小写字母、一个大写字母和一个数字。');
            }
        }
    }
}

调用模型验证

$model = new MyForm();  
  
// 假设$data是从表单提交中获取的数组  
if ($model->load($data) && $model->validate()) {  
    // 数据验证通过,可以执行保存或其他操作  
} else {  
    // 数据验证失败,可以获取错误信息并显示给用户  
    $errors = $model->getFirstErrors();  
    // 处理$errors...  
}

常用验证规则

public function rules()  
{  
    return [  
        [['username', 'email'], 'required'],
        ['email', 'email'],
        ['username', 'string', 'max' => 255],
        ['age', 'number'],
        ['post_count', 'integer'],
        ['password', 'compare', 'compareAttribute' => 'password_repeat'],
        ['username', 'unique', 'targetClass' => '\app\models\User', 'message' => 'This username has already been taken.'],
        ['status', 'in', 'range' => [0, 1, 2]],
        ['description', 'filter', 'filter' => 'trim'],
        ['custom_field', 'validateCustomField'],
];  
}

public function validateCustomField($attribute, $params)
{
    if (!preg_match('/[a-zA-Z]+/', $this->$attribute)) {
    $this->addError($attribute, 'The custom field must contain at least one letter.');
    }
}

模型关系

  • 一对多
<?php  
  
namespace app\models;  
  
use yii\db\ActiveRecord;  
  
class User extends ActiveRecord  
{  
    // ... 其他属性和方法 ...  
  
    /**  
     * @return \yii\db\ActiveQuery  
     */  
    public function getPosts()  
    {  
        return $this->hasMany(Post::class, ['user_id' => 'id']);  
    }  
}
  • 一对一
<?php  
  
namespace app\models;  
  
use yii\db\ActiveRecord;  
  
class Post extends ActiveRecord  
{  
    // ... 其他属性和方法 ...  
  
    /**  
     * @return \yii\db\ActiveQuery  
     */  
    public function getUser()  
    {  
        return $this->hasOne(User::class, ['id' => 'user_id']);  
    }  
}
  • 调用
$user = User::findOne(1); // 假设用户ID为1  
$posts = $user->posts; // 通过getPosts()方法访问关系  
  
$post = Post::findOne(10); // 假设帖子ID为10  
$user = $post->user; // 通过getUser()方法访问关系
$users = User::find()->with('posts')->all();  
  
foreach ($users as $user) {  
    // 这里可以直接访问$user->posts,不需要额外的数据库查询  
    foreach ($user->posts as $post) {  
        
    }  
}

标签:yii2,验证,模型,echo,user,password,email,User
From: https://www.cnblogs.com/hu308830232/p/18105291

相关文章

  • 机器学习模型
    机器模型机器学习领域模型很多,根据不同的任务、算法类型和应用进行分类。模型各有特点,适用于不同的机器学习任务和应用。选择合适的模型取决于具体的问题、数据特性和期望的输出。1.监督学习模型:线性模型:线性回归、逻辑回归,是最基础的模型,用于预测连续值或分类。决策树:CART......
  • yii2 配置bootstrap使用
    yii2配置bootstrap使用配置config/web.php添加people<?php...$config=[...'bootstrap'=>['log','people'],...'components'=>['people'=>['class'......
  • yii2 Gii使用和自定义模板
    yii2Gii使用和自定义模板配置开启giiconfig/web.php添加代码if(YII_ENV_DEV){$config['bootstrap'][]='gii';$config['modules']['gii']=['class'=>'yii\gii\Module',];}入口脚本web......
  • yii2控制器
    yii2控制器Yii2的控制器(Controller)是MVC(Model-View-Controller)设计模式中的核心组件之一,负责处理用户请求并生成相应的响应。控制器包含了处理请求所需的方法(通常称为动作方法或动作),并可以调用模型和视图来执行相应的业务逻辑和展示内容。在Yii2中,控制器类通常继承自yii\we......
  • Babylon 如何使用AssetsManager(),导入多个模型
    AssetsManager是Babylon.js资产管理工具,可以加载多个模型或者纹理,并且在任务完成时提供回调函数。例如://创建一个AssetsManager实例constassetsManager=newBABYLON.AssetsManager(scene);//添加纹理加载任务consttextureTask=assetsManager.addTexture......
  • 状态压缩的三种模型
    第一种类型(摆放方块): 代码如下:#include<iostream>#include<climits>#include<algorithm>#include<cstring>#include<cstdio>#include<cmath>#include<queue>#include<string>#include<vector>usingnamespacestd;......
  • yii2安装
    yii2安装安装composercurl-sShttps://getcomposer.org/installer|phpmvcomposer.phar/usr/local/bin/composer安装yii2-basiccomposercreate-project--prefer-dist--stability=devyiisoft/yii2-app-basicyii2-basicnginx配置server{listen......
  • 人工智能大模型的两大领域:语言与图片生成
    随着科技的飞速发展,人工智能(AI)技术已经深入到我们生活的方方面面。在AI的众多应用中,大模型技术无疑是近年来最引人注目的领域之一。从老程序员的角度来看,人工智能大模型主要可以分为两大类:语言类和图片生成类。这两类大模型不仅有着各自独特的技术特点,还在实际应用中发挥着不可......
  • 56文章解读与程序——论文可下载-基于微网格形成的弹性配电系统新模型-----已提供下载
    ......
  • openGauss 访问控制模型
    访问控制模型可获得性本特性自openGauss1.1.0版本开始引入。特性简介管理用户访问权限,为用户分配完成任务所需要的最小权限。客户价值客户依据自身需求创建对应的数据库用户并赋予相应的权限给操作人员,将数据库使用风险降到最低。特性描述数据库提供了基于角色的访问控制......