如何在 ActiveRecord 自动化记录时间戳 [ 1.1 版本 ]
有很多方法可以自动化设置在ActiveRecord模型中yii时间戳。下面介绍两种方法:
- 通过rules()
- 通过beforeSave()
我们需要开始建立数据库表。
CREATE TABLE IF NOT EXISTS `Nodes` (
`id` bigint(20) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`created` datetime NOT NULL,
`modified` datetime NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
按照下面的方法我们会Yii shell工具建立模型:
model Node Nodes
创造crud功能我们需要这样:
crud Node
第一种方法是通过你的模型的rules做到的。这里有个例子。
/**
* @return array validation rules for model attributes.
*/
public function rules()
{
return array(
array('title','length','max'=>255),
array('title, created, modified', 'required'),
array('modified','default',
'value'=>new CDbExpression('NOW()'),
'setOnEmpty'=>false,'on'=>'update'),
array('created,modified','default',
'value'=>new CDbExpression('NOW()'),
'setOnEmpty'=>false,'on'=>'insert')
);
}
你在最后看到两个规则,一个规则是在更新记录的时候改变属性值,另外一个规则是在创建记录的时候改变属性值。你也可以看到“new CDbExpression("NOW()")”声明。这通过“NOW()”的MySQL服务器,它不会被避开。MySQL可以翻译它作为一个声明,并不是作为一个字符串。这意味着字段类型可以是其他日期/时间类型(时间戳、等等),它还可以工作。
另一个解决方案是通过beforeSave()方法,使用如下:
public function beforeSave() {
if ($this->isNewRecord)
$this->created = new CDbExpression('NOW()');
else
$this->modified = new CDbExpression('NOW()');
return parent::beforeSave();
}
这些都是简单和优雅解决这个问题的方法。
╃巡洋艦㊣ 北京
注册时间:2010-11-21
最后登录:5小时前
在线时长:1632小时15分
最后登录:5小时前
在线时长:1632小时15分
- 粉丝1369
- 金钱73018
- 威望835
- 积分97688
共 26 条评论
public function behaviors() { return [ TimestampBehavior::className(), ]; }
http://www.yiichina.com/doc/api/2.0/yii-behaviors-timestampbehavior
怎么还木有\r\n
怎么看不到
请教一下,多文件上传后图片的压缩是怎么处理的呢
http://www.yiiframework.com/extension/lcswfupload
我用的这个扩展,不错。
有道理,必须收藏起来~
为什么我按照这上面的配置,但是页面里面什么都没有?希望大家帮帮忙。
我的view里面这么写的:
<?php $this->widget('application.extensions.swfupload.CSwfUpload', array( 'jsHandlerUrl'=>Yii::app()->getBaseUrl().'/resource/js/handler.js', //Relative path 'postParams'=>array(), 'config'=>array( 'use_query_string'=>true, 'upload_url'=>$this->createUrl('s/up'), //Use $this->createUrl method or define yourself 'file_size_limit'=>'2 MB', 'file_types'=>'*.jpg;*.png;*.gif', 'file_types_description'=>'Image Files', 'file_upload_limit'=>01, 'file_queue_error_handler'=>'js:fileQueueError', 'file_dialog_complete_handler'=>'js:fileDialogComplete', 'upload_progress_handler'=>'js:uploadProgress', 'upload_error_handler'=>'js:uploadError', 'upload_success_handler'=>'js:uploadSuccess', 'upload_complete_handler'=>'js:uploadComplete', 'custom_settings'=>array('upload_target'=>'divFileProgressContainer'), 'button_placeholder_id'=>'swfupload', 'button_width'=>170, 'button_height'=>20, 'button_text'=>'<span class="button">'.Yii::t('messageFile', 'ButtonLabel').' (Max 2 MB)</span>', 'button_text_style'=>'.button { font-family: "Lucida Sans Unicode", "Lucida Grande", sans-serif; font-size: 11pt; text-align: center; }', 'button_text_top_padding'=>0, 'button_text_left_padding'=>0, 'button_window_mode'=>'js:SWFUpload.WINDOW_MODE.TRANSPARENT', 'button_cursor'=>'js:SWFUpload.CURSOR.HAND', ), ) ); ?>
<?php echo CHtml::beginForm(); ?> <div class="form"> <div class="row"> <div id="divFileProgressContainer"></div> <div class="swfupload"><span id="swfupload"></span></div> </div> </div> <?php echo CHtml::endForm(); ?>
'upload_success_handler'=>'js:uploadSuccessListView' TO 'upload_success_handler'=>'js:uploadSuccess'.Requirements
这个的意思是 把‘config’里面的
'upload_success_handler'=>'js:uploadSuccessListView'
改成
'upload_success_handler'=>'js:uploadSuccess'
吧?“ http://www.yiiframework.com/extension/swfupload ” 这里面Downloads 下面的两个都要下载后,再看下'yeyongyong'提供的方法就可以实现上传了。
Handlers and Style Example.zip [这里面有 handler.js]
swfupload-1.0.zip
在哪里下载这个扩展啊
等用了之后再看有没有问题。
没有调查就没有发言权啊。。。
挺简单实用的
看见很多人都没上传文件成功!我发表下我的看法!
比如我有个webapp:blog,那么我在blog下面新建文件夹uploads用来放上传的图片,这样写就可以上传成功,
在controller里面要那么写:
//设定允许被访问的方法,别忘记设置允许访问的方法,否则上传不了
public function accessRules() { return array( array('allow', // allow all users to perform 'index' and 'view' actions 'actions'=>array('index','view','updateajax','uploads'), 'users'=>array('*'), ), ); } public function actionUploads() { $year=date('Y'); $month=date('m'); $path='uploads/'.$year.'/'.$month.'/'; //如果目录不存在就创建目录 if(!file_exists('uploads/'.$year.'/')){ mkdir('uploads/'.$year.'/','0777'); } if(!file_exists($path)){ mkdir($path,'0777'); } $filedata=$_FILES['Filedata']; @move_uploaded_file($filedata['tmp_name'],$path.uniqid().'.gif'); }
view部分这么写:
//主要是这两个地址的配置:例如在webapp下面的assets文件夹下建立path/to/文件夹并将handlers.js放在该目录下
'jsHandlerUrl'=>Yii::app()->assetManager->getBaseUrl().'/path/to/handlers.js', //Relative path 'postParams'=>array(), 'config'=>array( 'use_query_string'=>true, //上传的controllers地址 'upload_url'=> $this->createUrl('helloworld/uploads'), //Use $this->createUrl method or define yourself
更好更简单的方法:
http://www.yiichina.com/topic/2026
稍后会把上传功能做好!
好东西啊~
把舰长顶起来
controller是怎么接收值的啊,是这个吗:
$filedata=$_FILES['Filedata'];
@move_uploaded_file($filedata['tmp_name'],'path/to/folder');
可是怎么没传上去啊,'path/to/folder'这个路径我也改了啊
我没看懂啊,详细说明下好吗,还有handler.js是什么
这样看着有点头晕,能说的详细点吗