位置: 编程技术 - 正文

Yii中Model(模型)的创建及使用方法(modelist模型)

编辑:rootadmin

推荐整理分享Yii中Model(模型)的创建及使用方法(modelist模型),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:eyring模型,模型 model,模型lnyi=β0+β1lnxi+ui,model模型原理,modelist模型,modelist模型,模型 model,yiq模型,内容如对您有帮助,希望把文章链接给更多的朋友!

本文实例分析了Yii中Model(模型)的创建及使用方法。分享给大家供大家参考,具体如下:

YII 实现了两种模型,表单模型(CFormModel类)和Active Record模型(CAtiveRecord类),它们都继承自CModel类。 CFormModel代表的数据模型是从HTML表单收集的输入,封装了所有逻辑(如表单的验证和其它业务逻辑,应用到表单的域上)。它能将数据存储在内 存中,或者在一个Active Record的帮助下,存入数据库里。

数据库连接操作

在config/main.php中

打开注释,php要支持pdo

查看操作日志

将注释打开

一. 基于CActiveRecord的Model

Active Record(AR) 是一种设计模式,用面向对象的方式抽象的访问数据,Yii中,每一个AR对象的实例都可以是CActiveRecord类或者它的子类。它包装了数据库表 或视图中的一行记录,并封装了所有的逻辑和风闻数据库的细节,有大部分的业务逻辑,必须使用这种模型。数据库表中一行每列字段的值对应AR对象的一个属 性。它将表映射到类,行映射到对象,列则映射到对象的数据。也就是说每一个Active Record类的实例代表了数据库中表的一行。但一个 Active Record类不单单是数据库表中的字段跟类中属性的映射关系。它还需要在这些数据上处理一些业务逻辑,定义了所有对数据库的读写操作。

1) 声明一个基于CActiveRecord 类的Model

2) 使用父类的方法完成数据库操作

(1) Insert:

(2) Select: 常用几种方法

(3) Update

(4) Delete

(5) 使用事务

二. 基于CFormModel 的Model

编写表单需要的HTML之前,我们需要决定我们希望用户输入哪些数据,以及应该符合什么规则。一个模型类可以用来记录这些信息,模型是保持用户输入并进行验证的核心

根据我们如何使用用户的输入,我们可以创建两种类型的模型。如果用户输入的数据被收集,使用,然后丢弃,我们将创建一个表单模型(form model); 如果用户输入的数据被保存到数据库中,我们则会使用 active record 。这两种模型都继承了他们相同的基类CModel中定义的表单的通用接 口。

1) 模型类的定义

下面的例子中,我们创建了一个LoginForm模型,用来收集用户在登陆页面的输入。由于登陆信息仅仅用于用户验证,并不需要保存,因此我们用form model创建

LoginForm一共声明了三个属性(attributes),$username、$password、$rememberMe

用来记录用户输入的用户名、密码、以及是否记住登陆的选项。因为$rememberMe有了默认值false,所以显示表单时对应的选框是没有勾选的。

提示:我们使用名"attributes",而不是"properties",来把他们和正常的属性(properties)进行区分。

2) 声明验证规则

Yii中Model(模型)的创建及使用方法(modelist模型)

一旦把用户提交的数据填充到模型,在使用之前,我们要检查他们是否合法。这是通过对输入进行一组规则验证实现的。我们在rulers()方法中通过配置一个数组来定义验证规则

上面的代码指明了用户名和密码是必须得,密码需要被验证,rememberMe必须是布尔型

rules()中返回的每条规则,必须按照如下格式

array('AttributeList', 'Validator', 'on'=>'ScenarioList', ...附加选项(additional options))

AttributeList 是一个被逗号分隔的需要验证的属性名列表。Validator 指出了需要做怎样的验证。可选的on 参数指出了该规则应用的场景列表,(additional options)是对应的name-value,用于初始对应验证器的相关属性

在一个规则中指定Validator有三种方法,首先Validator可以使该类的一个方法,比如上面例子中的authenticate。该Validator方法必须按照如下的格式声明其次 Validator 可以使验证器的类名,当规则适用时,一个验证器类的实例会被创建并进行实际的验证。规则里的附加属性,用于初始实例的相关属性。验证器类必须继承于CValidator

提示:当对active record模型指定规则的时候,我们可以使用特殊的参数‘on',

该参数可以使'insert' 或者 'update',可以让规则分别在插入或者更新的时候适用。如果没有生命,该规则会在任何调用save()的时候适用。

第三、Validator 可以使验证器类预先定义的别名。在上面的例子中,“required”便是CRequiredValidator的别名,用来验证属性不能为空。下面是预定义的验证器类别名的列表

&#; boolean:CBooleanValidator的别名,验证属性的值是否是CBooleanValidator::trueValue 或者 CBooleanValidator::falseValue&#; captcha:CCaptchaValidator的别名,验证属性的值是否和CAPTCHA中显示的验证码的值相等&#; compare:CCompareValidator的别名,验证属性的值是否等于另一个属性或者一个常量&#; email:CEmailValidator的别名,验证属性的值是否是个合法的email地址&#; default:CDefaultValueValidator的别名,为属性指派一个默认值&#; exist:CExistValidator的别名,验证属性的值是否能在表的列里面找到&#; file: CFileValidator 的别名, 验证属性是否包含上传文件的名字&#; filter:CFilterValidator的别名,使用一个过滤器转换属性的形式&#; in: CRangeValidator 的别名, 验证属性值是否在一个预订的值列表里面&#; length: CStringValidator 的别名, 确保了属性值的长度在指定的范围内.&#; match: CRegularExpressionValidator 的别名, 验证属性是否匹配一个正则表达式.&#; numerical: CNumberValidator 的别名, 验证属性是否是一个有效的数字.&#; required: CRequiredValidator 的别名, 验证属性的值是否为空.&#; type: CTypeValidator 的别名, 验证属性是否是指定的数据类型.&#; unique: CUniqueValidator 的别名, 验证属性在数据表字段中是否是唯一的.&#; url: CUrlValidator 的别名, 验证属性是否是一个有效的URL路径.

下面我们给出一些使用预定义验证器的例子。

3) 安全属性的设置

当一个模型创建之后,我们往往需要根据用户的输入,为它填充属性。这可以方便的通过下面批量赋值的方式来实现

最后那条语句便是批量赋值,把$_POST['LoginForm']中每个属性都赋值到对应的模型属性中,它等价于下面的语句

声明属性是否是安全属性是个至关重要的工作。例如,如果我把把数据表的主键暴露为安全属性,那么便可以通过修改主键的值,来管理本没有权限管理的数据,进行攻击。

4) 1.1版中的安全属性

在1.1版中,如果属性在适用的规则中指定了验证器,则认为是安全的。例如

上面的代码中用户名和密码属性在login的场景下不允许为空。用户名、密码邮箱在register的场景下不允许为空。因此如果在login的场景下 进 行批量赋值,仅仅用户名和密码会被赋值,因为login场景下验证规则里仅出现了这两个属性,但是如果是在register场景下,那么这三个属性都 会被 赋值。

那么为什么我们使用如此的策略来决定一个属性是否是安全属性呢?因为一个属性,已经有了一个或者多个对个进行校验的规则,那么我还需要担心吗?

需要记住的是,验证器是用来检测用户输入的数据,而不是我们用代码产生的数据(例如 时间戳,自增的主键等)。因此不要给那些不需要用户输入的属性添加验证器。

有时候我们想声明一些属性为安全属性,但是又不必给指定一个验证规则。例如文章的正文属性,我们可以允许用户的任何输入。为了实现这个目标,我们可以用safe规则。

对应的也有一个unsafe规则,来指定哪些属性是不安全的unsafe并不常用,对你以前定义的安全属性来说,这是个例外5) 获取验证错误当验证结束后,任何可能的错误都存储在模型的实例中。我们可以通过调用CModel::getErrors() 和 CModel::getError()重新获取到。这两个方法的区别在于,第一个可以返回指定模型属性的所有错误,而第二个方法只返回了第一条错误。

6) 属性标签

设计表单的时候,我们需要为用户的输入框显示一个标签,来提示用户输入。尽管我们可以再form中写死,但是如果我们在相应的模型中指定的话会更加方便和灵活

默认情况下,CModel 会简单的返回属性的名字作为标签。这可以通过重写attributeLabels() 方法来自定义。在接下来章节中我们将看到,在模型中指定标签可以让我们更快更强大的创建一个form表单

希望本文所述对大家基于yii框架的php程序设计有所帮助。

yii实现使用CUploadedFile上传文件的方法 本文实例讲述了yii实现使用CUploadedFile上传文件的方法。分享给大家供大家参考,具体如下:一、前端代码Html代码:formaction="phpecho$this-createUrl('/upload/defa

yii使用activeFileField控件实现上传文件与图片的方法 本文实例讲述了yii使用activeFileField控件实现上传文件与图片的方法。分享给大家供大家参考,具体如下:yii框架提供了activeFileField控件来完成上传文件

Yii使用Captcha验证码的方法 本文实例讲述了Yii使用Captcha验证码的方法。分享给大家供大家参考,具体如下:详细代码可参考:yii自带的示例代码post项目,里面有一个contact表单用到

标签: modelist模型

本文链接地址:https://www.jiuchutong.com/biancheng/284298.html 转载请保留说明!

上一篇:yii数据库的查询方法(查询数据库的7个标准步骤)

下一篇:yii实现使用CUploadedFile上传文件的方法

  • 补交印花税怎么做账
  • 进项税转出的金额含税吗
  • 个税退回怎么申请
  • 应交税费是什么类
  • 长期待摊费用怎么算
  • 电子发票怎么开具
  • 职工教育经费中其他费用包括
  • 滴滴行程单修改器
  • 扣缴附加税怎么做分录
  • 先分后合是什么意思
  • 信用减值损失贷方
  • 哪些纳税人不得办理一般纳税人登记
  • 增值税普通发票查询真伪
  • 外购商品赠送给顾客
  • 开增值税专用发票需要合同吗
  • 如何从百旺开票系统中导出开票明细
  • 企业优惠条件
  • 学校的房子归哪里管
  • 外币报表未分配利润折算
  • 分公司会有股东吗
  • 加工贸易企业如何财务管理账务流程
  • 个人股票期权收益所得税怎么缴纳?
  • 建设单位管理费费率
  • 固定资产更新改造替换部件怎么做账务处理
  • 法律诉讼费计入什么会计科目
  • 英雄联盟电脑软件图片
  • 设计费和勘察费的会计科目
  • 在win7系统中,添加打印机驱动程序
  • PHP+Mysql+jQuery文件下载次数统计实例讲解
  • 苹果充电宝怎么验真假
  • PHP:Memcached::__construct()的用法_Memcached类
  • 预算会计的特点包括
  • php options
  • php $_files
  • 侧边导航栏点击后再展开
  • Laravel 5.1 on SAE环境开发教程【附项目demo源码】
  • 应收账款周转天数减少说明什么
  • 销售部门招待费用预算
  • 现金流量表填写说明
  • 所得税季度申报表怎么填
  • 迭代器实现原理
  • mysqli删除
  • mongodb从入门到商业实战
  • 织梦怎么用
  • 筹建期所得税年度申报如何填列
  • 科技局创业扶持资金
  • 合伙企业要不要每月做账?报税是不是与一般的有限公司一样,每月申报纳税吗?
  • 小企业长期债券投资交易费用
  • sqlserver分布式事务
  • 购买材料增值税税率
  • 小规模纳税人免增值税的账务处理
  • 小规模纳税人技术维护费可以抵扣吗
  • 小规模纳税人企业所得税征收标准
  • 固定资产盘亏是什么意思
  • 简易计税通过哪个科目核算
  • 营改增对财务人员的影响
  • 针对收入未申报的问题
  • 如何提取工会经费的钱
  • 已认证未抵扣的发票可以退回红冲吗
  • 私人公司盈利怎么把钱拿出来
  • sql server 性能分析
  • slmgr.vbs /dli
  • 手把手教你安装使用国家反诈中心
  • ubuntu系统安装教程
  • 离线安装macos
  • windows7无法启动怎么修复
  • 微软官方屏蔽更新工具
  • windows8怎么设置
  • windows8.1卸载软件
  • cocos2dx4.0入门
  • cordova怎么样
  • 网页打开新窗口怎么关闭
  • shell发送邮件
  • python嵌套列表生成
  • jquery触发点击事件click
  • shell删除一个文件
  • unity协程的工作原理
  • android系统启动流程
  • 个人以土地投资入股都需缴纳哪些税
  • 税务局残保金征收工作汇报
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设