yii小物件详解
2016-04-08 20:32
555 查看
胡扯两句:刚接触Yii的时候就听说小物件特别神奇、但是并没有深入了解,只是像许多新手一样略知皮毛,直到后来经常用到小物件之后,才开始慢慢的真正感觉到其强大之处。然后就开始在网上查询资料,发现网上资料虽然挺全的,但是零零散散,不太利于像我这样的新手查询,今天趁着闲暇之余,正好有空整理整理,以便于日后参考以及新手学习。
先写一个简单的例子,在例子中穿插讲解,更便于理解。
一、 前端views页面
1.下面是form表单部分
以上表单也就是相当于表单中<form
method="post" action="" enctype="multipart/form-data">这个部分代码。
其中Yii小物件中的CActiveForm组件新增许多的属性,可供使用,我举出常用的属性如下:
action:也就是表单提交的地址,默认提交的本页面。
enableClientValidation:进行客户端验证,值为true/false。
clientOptions:是否进行ajax动态验证,里面也有很多种方法
经常用到的是:validateOnSubmit:提交时验证,也就为动态ajax验证。
其他的在这里不进行详细讲解这个方法,如果感兴趣可以看我自己整理的文档《clientOptions属性详解》
id:也就是表单的id
method:如上
htmlOptions:自定义方法,像class、enctype之类,表单上有的属性都可以写到这里
2. 下面是input表单部分
代码里面小1部分的labelEx主要显示表单前面的提示文字
代码里面小2部分,textField部分是个文本框类型的表单,第三个值是个数组,可以写表单的属性,比如class,maxlength,placeholder等表单属性。Yii还提供了单选按钮,复选框,等一系列类型的表单,如果需要查看其他类型请查看根据自己的理解整理的《yii小物件表单集合》
3. 结束部分
二、controller控制器
1. 下面是添加处理部分代码
这是一个比较简单的添加流程,如果其中可以参杂逻辑判断,然后再进行添加。
2.下面是修改处理部分代码
这是一个比较简单的修改流程,如果其中可以参杂逻辑判断,然后再进行修改。
注:可以看出修改和添加不同之处仅仅在于创建模型之处,当模型为
三、model模型部分
下面是简单模型部分代码
分析:上列为数据model实例,一般用到的有四个方法。第一个方法和第二个数据表名方法为必写,第三个字段名称方法和第四个规则验证方法为小物件所用,这里着重讲后两个。当然你也可以用gii生成,由于gii代码较多,并且大部分为无用代码,所以自己手写了一段,供大家理解。
字段名称方法:这里对应的是小物件的提示,以及生成表单,只有在这里定义之后,小物件才会生成。看过上述前端view页面之后,实际并不难于理解,这里不进行详细讲解,如感兴趣,可以上网查阅源码。
rules 上传规则验证(很重要):上述只列出来4个Yii自带的验证方法,书写格式也就是一个二维数组,在这里将这四个方法进行简单讲解,其他的验证方法请移步到《yii验证规则 》
required:如果为此项验证规则,所属字段为必填项。
unique:如果为此项验证规则,会先去数据库检索该字段是否有该值,无则成功填入
numerical:如果此项验证规则,会验证此字段是否位数字,并且大于1,小于199,如果验证成功,则填入库
safe:如果此项验证规则,字段将不验证,并且可以为空。
后言:Yii小物件说深奥,实际也就这么简单,稍一用心了解,就全部理解了。有可能看此篇文章有做了很久大大牛,也有可能也只是一个新手。如果是新手,工资也有可能少的可怜,希望大家不要气馁,要继续努力~如果是大牛,希望也不要恶意去评价此篇文章,如果不喜欢可以抱着批改的心态去看待~谢谢大家花时间看完这篇文章。
请大家尊重原创,本文也花费了不少心思,转发请写明出处
@让我们一起共同努力~
先写一个简单的例子,在例子中穿插讲解,更便于理解。
一、 前端views页面
1.下面是form表单部分
1 2 3 4 5 6 7 8 9 10 11 12 | $form = $this ->beginWidget( 'CActiveForm' , array ( 'enableClientValidation' => true, //是否启用客户端验证 'clientOptions' => array ( 'validateOnSubmit' => true, //提交时验证 ), 'htmlOptions' => array ( 'class' => 'form-horizontal' , 'role' => 'form' , 'enctype' => 'multipart/form-data' ) )); |
method="post" action="" enctype="multipart/form-data">这个部分代码。
其中Yii小物件中的CActiveForm组件新增许多的属性,可供使用,我举出常用的属性如下:
action:也就是表单提交的地址,默认提交的本页面。
enableClientValidation:进行客户端验证,值为true/false。
clientOptions:是否进行ajax动态验证,里面也有很多种方法
经常用到的是:validateOnSubmit:提交时验证,也就为动态ajax验证。
其他的在这里不进行详细讲解这个方法,如果感兴趣可以看我自己整理的文档《clientOptions属性详解》
id:也就是表单的id
method:如上
htmlOptions:自定义方法,像class、enctype之类,表单上有的属性都可以写到这里
2. 下面是input表单部分
1 2 3 4 5 6 | // 1.该部分是输出表单提示的部分 <?php echo $form ->labelEx( $app , 'name' ); ?> // 2.该部分是输出表单部分(文本框类型) <?php echo $form ->textField( $app , 'name' , array ( 'class' => 'input' )); ?> // 2.该部分是输出表单错误提示部分 <?php echo $form ->error( $app , 'name' ); ?> |
代码里面小2部分,textField部分是个文本框类型的表单,第三个值是个数组,可以写表单的属性,比如class,maxlength,placeholder等表单属性。Yii还提供了单选按钮,复选框,等一系列类型的表单,如果需要查看其他类型请查看根据自己的理解整理的《yii小物件表单集合》
3. 结束部分
1 2 | // 代码部分 <?php $this ->endWidget(); ?> |
1. 下面是添加处理部分代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // 代码部分 //添加处理以及页面 public function actionAdd(){ //创建模型 $app = new App(); //添加操作 if (isset( $_POST [ 'App' ])) { $app ->attributes = $_POST [ 'App' ]; if ( $app ->save()) { echo '添加成功' ; } else { // 查看模型中是否有错误阻拦 $res = $app ->hasErrors(); if ( empty ( $res )) { echo '添加失败' ; } } } $this ->render( 'add' , array ( 'app' => $app )); } |
2.下面是修改处理部分代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // 代码部分 //修改处理以及页面 public function actionUpdate( $id ){ //创建模型 $app = App::model()->findByPk( $id ); //修改操作 if (isset( $_POST [ 'App' ])) { $app ->attributes = $_POST [ 'App' ]; if ( $app ->save()) { echo '修改成功' ; } else { // 查看模型中是否有错误阻拦 $res = $app ->hasErrors(); if ( empty ( $res )) { echo '修改失败' ; } } } $this ->render( 'update' , array ( 'app' => $app )); } |
注:可以看出修改和添加不同之处仅仅在于创建模型之处,当模型为
new
App()创建时,表单(save)为新增操作。当模型为App::model()时,表单(save)为修改操作,当为修改操作时,表单会有默认值。为数据库中的字段~
三、model模型部分
下面是简单模型部分代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | //APP类 class App extends CActiveRecord { static function model( $classname = __CLASS__ ) { return parent::model( $classname ); } //数据表名 public function tableName() { return '{{app}}' ; } //字段名称 public function attributeLabels() { return array ( 'name' => '年龄:' , 'class' => '班级:' , 'age' => '年龄:' ); } //rules 上传规则验证 public function rules() { return array ( array ( 'name' , 'required' , 'message' => '请填写姓名' ), array ( 'title' , 'unique' , 'message' => '姓名已经存在' ), array ( 'age' , 'required' , 'message' => '请填写年龄' ), array ( 'age' , 'numerical' , 'min' => '1' , 'max' => '199' , 'tooSmall' => '年龄必须为1到199' , 'tooBig' => '年龄必须为1到199' ), // 如果非必填项,也要在这里定义否则数据库接收不到 array ( 'class' , 'safe' ), ); } |
字段名称方法:这里对应的是小物件的提示,以及生成表单,只有在这里定义之后,小物件才会生成。看过上述前端view页面之后,实际并不难于理解,这里不进行详细讲解,如感兴趣,可以上网查阅源码。
rules 上传规则验证(很重要):上述只列出来4个Yii自带的验证方法,书写格式也就是一个二维数组,在这里将这四个方法进行简单讲解,其他的验证方法请移步到《yii验证规则 》
required:如果为此项验证规则,所属字段为必填项。
unique:如果为此项验证规则,会先去数据库检索该字段是否有该值,无则成功填入
numerical:如果此项验证规则,会验证此字段是否位数字,并且大于1,小于199,如果验证成功,则填入库
safe:如果此项验证规则,字段将不验证,并且可以为空。
后言:Yii小物件说深奥,实际也就这么简单,稍一用心了解,就全部理解了。有可能看此篇文章有做了很久大大牛,也有可能也只是一个新手。如果是新手,工资也有可能少的可怜,希望大家不要气馁,要继续努力~如果是大牛,希望也不要恶意去评价此篇文章,如果不喜欢可以抱着批改的心态去看待~谢谢大家花时间看完这篇文章。
请大家尊重原创,本文也花费了不少心思,转发请写明出处
@让我们一起共同努力~
相关文章推荐
- 一个关于if else容易迷惑的问题
- PHP5.2.*防止Hash冲突拒绝服务攻击的Patch
- 深入理解PHP之匿名函数
- JSP/PHP基于Ajax的分页功能实现
- 关于PHP通过PDO用中文条件查询MySQL的问题。
- 什么是设计模式
- PHP数据库长连接mysql_pconnect的细节
- Php Installing An Expansion
- php7 读取php.ini[4]
- PHP+Apache在Windows 9x下的安装和配置
- IIS 6 的 PHP 最佳配置方法
- 安装Apache和PHP的一些补充
- Linux Apache+MySQL+PHP
- 建立Apache+PHP+MySQL数据库驱动的动态网站
- PHP 5.3.0 安装分析心得
- apache 环境下 php 的配置注意事项
- ASP.NET、ASP、PHP、JSP之间有什么区别?
- PHP VBS JS 函数 对照表
- C语言实现的统计php代码行数功能源码(支持文件夹、多目录)