然用过Yii做了一个小项目了,但是过程中间解决的问题没有随手记下来,导致新项目开始后,以前碰到的问题还得在查一遍,干脆就记下来,以便不时之需。

有新的会随时更新。

1.如何显示ActiveRecord执行的sql语句:

array(
  'class'=>'CFileLogRoute',
  'levels'=>'trace,error, warning',
),
// uncomment the following to show log messages on web pages
/*
array(
  'class'=>'CWebLogRoute',
),
*/

在项目的config/main.php中,找到上面的代码段,添加trace,取消底下一段的注释

2.在生成的_search.php中,如何去掉必须输入项的 "*" 号:

只需要加上一句代码:<?php CHtml::$afterRequiredLabel = '';?>

3.如何处理Model关联的对象为空的情况。

例如:显示员工所属部门,使用TbDetailView时,

  'attributes'=>array(......

    array('label'=>'所属部门','value'=>!empty($model->department)?CHtml::encode($model->department->name) : '未设置'),

4.如何在下拉列表中显示“未选择”。

<?php echo $form->dropDownListRow($model,'type',CHtml::listData(CodeType::model()->findAll(),'id','name'),array('prompt'=>'[未选择]')) ?>

5.如何在TbGridView中显示CStarRating控件:

<?php $this->widget('bootstrap.widgets.TbGridView',array(
'id'=>'program-grid',
'dataProvider'=>$model->search(),
'afterAjaxUpdate'=>'function(id,data){ $("[id^=\'rating\'] > input").rating({"required":true}); $("[id^=\'rating\'] > div").attr("disabled","disabled"); }',
//'filter'=>$model,
'type'=>'striped bordered',
'columns'=>array(
'id',
'business_id',
'business_name',
'program_code.name::程序类型',
'program_code1.name::开发语言',
array('name'=>'level','type'=>'raw',
'value'=>'$this->grid->controller->widget("CStarRating",
array("starCount"=>"5",
"minRating"=>"1",
"maxRating"=>"10",
"allowEmpty"=>false,
"name"=>$data->id,
"id"=>"rating_" .$data->id,"value"=>$data->level, ),true)',),
array(
'class'=>'bootstrap.widgets.TbButtonColumn',
),
),
)); ?>

6.怎样在Grid中对外键关联的字段进行排序:

例如:Model名为Product,在Model里:

public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'product_agent'=>array(self::BELONGS_TO,'Agent','manufacturer'),
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->with = array('product_agent'); ............... return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
'sort'=>array('attributes'=> array('id','register_date','product_name','manufacturer','product_agent.name','unit_price','library_count' )),
));
}

在页面里:

<?php $this->widget('zii.widgets.grid.CGridView', array(
'id'=>'product-grid',
'dataProvider'=>$model->search(),
//'filter'=>$model,
'columns'=>array(
'id', 'product_agent.name::生产厂商', array(
'class'=>'CButtonColumn',
'afterDelete'=>'function(link,success,data){if(data != "") alert(data);};'
),
),
)); ?>

7.如何自定义验证:

比如,在出库时判断是否库存不足:

在model中:

public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
.......
array('quantity', 'quantityValidator'),
);
}
/*
在库数的验证
*/
public function quantityValidator($attribute,$params)
{
if ( $this->quantity > $this->shipment_product->library_count ) {
$this->addError('quantity', '库存不足!');
}
}

8.如何对一个Model中的日期字段按照一个指定范围进行查询:

在model里添加两个字段:

public $occurrence_date_start;
public $occurrence_date_end;

然后再search方法中:

public function search()
{
$criteria=new CDbCriteria; $criteria->compare('id',$this->id);
if((isset($this->occurrence_date_start) && trim($this->occurrence_date_start) != "")
&& (isset($this->occurrence_date_end) && trim($this->occurrence_date_end) != ""))
$criteria->addBetweenCondition('occurrence_date', ''.$this->occurrence_date_start.'', ''.$this->occurrence_date_end.'');
...... return new CActiveDataProvider(get_class($this), array(
'criteria'=>$criteria,
'sort'=>array('attributes'=>array('id','occurrence_date','shipment_customer.name','shipment_product.product_name','shipment_staff.name',
'shipment_code.code_name','quantity','total_amount','actual_back_section_date',)),
));
}

在前台页面,我这里用的是Yii内置的CJuiDatePicker:

<div class="row">
<?php echo $form->label($model,'occurrence_date_start'); ?>
<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model'=>$model,
'attribute'=>'occurrence_date_start',
// additional javascript options for the date picker plugin
'options'=>array(
'showAnim'=>'fold',
'showMonthAfterYear'=>'false',
),
'htmlOptions'=>array(
'style'=>'height:20px;',
), 'language'=>'zh_cn',
));
?>
</div>
<div class="row">
<?php echo $form->label($model,'occurrence_date_end'); ?>
<?php $this->widget('zii.widgets.jui.CJuiDatePicker', array(
'model'=>$model,
'attribute'=>'occurrence_date_end',
// additional javascript options for the date picker plugin
'options'=>array(
'showAnim'=>'fold',
'showMonthAfterYear'=>'false',
),
'htmlOptions'=>array(
'style'=>'height:20px;',
), 'language'=>'zh_cn',
));

From: http://www.cnblogs.com/dahuzizyd/archive/2013/03/26/2983471.html

Yii框架常见问题汇总的更多相关文章

  1. J2EE进阶(十)SSH框架整合常见问题汇总(一)

    SSH框架整合常见问题汇总(一) 前言 以下所列问题具有针对性,但是遇到同类型问题时均可按照此思路进行解决. HTTP Status 404 - No result defined for actio ...

  2. Nuxt.js的踩坑指南(常见问题汇总)

    本文会不定期更新在nuxt.js中遇到的问题进行汇总.转发请注明出处,尊重作者,谢谢! 强烈推荐作者文档版踩坑指南,点击跳转踩坑指南 在Nuxt的官方文档中,中文文档和英文文档都存在着不小的差异. 1 ...

  3. 《PDF.NE数据框架常见问题及解决方案-初》

    <PDF.NE数据框架常见问题及解决方案-初> 1.新增数据库后,获取标识列的值: 解决方案:    PDF.NET数据框架,已经为我们考略了很多,因为用PDF.NET进行数据的添加操作时 ...

  4. yii框架安装心得

    最近在学习yii框架, 现在将遇到的一些问题和解决方法写出来与大家分享. yii框架的安装: 下载yii框架之后, 打开文件运行init.bat文件, 如果闪退就打开php的扩展(php_openss ...

  5. Yii框架 400 错误

    YII  400错误 在YII框架中400错误是csrf校验失败的意思 csrf是什么? CSRF(Cross-site request forgery跨站请求伪造,也被称为"One Cli ...

  6. Yii框架CURD方法

    在YII框架中,CURD有2种方式: 1.AR模式:2. DAO模式 AR模式下 查全部   MODEL  $model->find()->asArray()->all()查单 个  ...

  7. CentOS安装Oracle数据库详细介绍及常见问题汇总

    一.安装前准备 1.软件硬件要求 操作系统:CentOS 6.4(32bit)Oracle数据库版本:Oracle 10g(10201_database_linux32.zip)最小内存:1G(检查命 ...

  8. SVN集中式版本控制器的安装、使用与常见问题汇总

    SVN是Subversion的简称,是一个开放源代码的版本控制系统,它采用了分支管理系统,集中式版本控制器 官方网站:https://www.visualsvn.com/ 下载右边的服务器端,左边的客 ...

  9. Yaf(Yet Another Framework)用户手册 yii框架手册

    地址:http://www.laruence.com/manual/ yaf框架手册:http://pan.baidu.com/s/1bnHFPHd yii框架手册:http://pan.baidu. ...

随机推荐

  1. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

    http://quote.eastmoney.com/center/list.html#28003501_0_2 http://bbs.tianya.cn/post-53726-21098-1.sht ...

  2. PHP输出图片文件,实现浏览器缓存机制

    $ETag = '"'.md5($file).'"'; if(env('HTTP_IF_NONE_MATCH') === $ETag){ header ( 'ETag: '.$ET ...

  3. CI源码学习 一步一步重写 CodeIgniter 框架

    文章:http://www.cnblogs.com/zhenyu-whu/archive/2013/08.html

  4. citrix xen server 虚拟机无法关闭的问题

    悲剧的一台windows的虚拟机无法重启无法关机.如下图,一直卡住不动. 首先找到这台机器: [root@xenserver- xen]# xe vm-list name-label=-vss\ se ...

  5. SQL函数:小写金额转换成大写

    /********************************************************作者:版本:1.0创建时间:20020227修改时间:功能:小写金额转换成大写参数:n ...

  6. Case When PK PIVOT

    SELECT *FROM ScoreInfogo Name Course Score---------- ---------- -----------Lucy Chinese 74Jim Math 8 ...

  7. PS制作独特火焰立体文字

    效果图中的文字部分并不复杂,为简单的立体字,用图层样式及手工复制就可以做好.火焰部分稍微有点复杂,用动感及火焰素材叠加,然后再加上火花及炫光等渲染出动感效果即可.最终效果 素材下载:本教程中需要用到的 ...

  8. MyEclipse过期激活方法

    如果已经过期会提示,进行购买.重新激活和退出,我们选择重新激活. 打开浏览器,地址栏输入key.858game.com,然后输入名称,在线获得MyEclipse的激活码. 输入Sumscripter: ...

  9. WordPress 全方位优化指南(下)

    上一篇 WordPress 全方位性能优化指南(上)主要从网站性能指标.优化缓存.MySQL 等方面给大家介绍了如何进行 WordPress 性能优化,但还远远不够,毕竟像 WordPress 这样的 ...

  10. UNIX网络编程——套接字选项

    http://www.educity.cn/linux/1241288.html 有时候我们需要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要学习套接字选项. int getsockopt( ...