╃巡洋艦㊣ 2011-03-03 18:06:00 11810次浏览 26条评论 6 4 0

有很多方法可以自动化设置在ActiveRecord模型中yii时间戳。下面介绍两种方法:

  1. 通过rules()
  2. 通过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();
}

这些都是简单和优雅解决这个问题的方法。

觉得很赞
  • 评论于 2011-03-10 10:23 举报

    收藏起来~

  • 评论于 2011-03-10 10:25 举报

    感谢巡洋舰站长的无私奉献!

  • 评论于 2011-03-10 10:25 举报

    谢谢我们v5的舰长 翻译分享~

  • 评论于 2011-03-10 10:26 举报

    大家都可以在这里分享,希望大家积极参与进来!

  • 评论于 2011-03-10 10:41 举报

    希望更给力哈。

  • 评论于 2011-05-10 20:48 举报

    请问handler.js文件在哪里?

  • 评论于 2011-07-21 14:46 举报

    这样看着有点头晕,能说的详细点吗

  • 评论于 2011-08-15 09:53 举报

    我没看懂啊,详细说明下好吗,还有handler.js是什么

  • 评论于 2011-08-15 14:42 举报

    controller是怎么接收值的啊,是这个吗:$filedata=$_FILES['Filedata'];
    @move_uploaded_file($filedata['tmp_name'],'path/to/folder');
    可是怎么没传上去啊,'path/to/folder'这个路径我也改了啊

  • 评论于 2011-12-13 10:35 举报

    把舰长顶起来

  • 评论于 2011-12-30 12:12 举报

    好东西啊~

  • 评论于 2012-01-05 09:45 举报

    稍后会把上传功能做好!

  • 评论于 2012-02-18 11:22 举报

    更好更简单的方法:
    http://www.yiichina.com/topic/2026

  • 评论于 2012-02-27 22:10 举报

    看见很多人都没上传文件成功!我发表下我的看法!
    比如我有个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
    
  • 评论于 2012-03-07 08:12 举报

    挺简单实用的

  • 评论于 2012-04-27 17:50 举报

    等用了之后再看有没有问题。
    没有调查就没有发言权啊。。。

  • 评论于 2012-05-09 01:20 举报

    在哪里下载这个扩展啊

  • 评论于 2012-05-09 15:45 举报

    http://www.yiiframework.com/extension/swfupload ” 这里面Downloads 下面的两个都要下载后,再看下'yeyongyong'提供的方法就可以实现上传了。

    Handlers and Style Example.zip [这里面有 handler.js]
    swfupload-1.0.zip

  • 评论于 2012-05-23 15:32 举报
    'upload_success_handler'=>'js:uploadSuccessListView' TO 
    'upload_success_handler'=>'js:uploadSuccess'.Requirements
    

    这个的意思是 把‘config’里面的 'upload_success_handler'=>'js:uploadSuccessListView'
    改成 'upload_success_handler'=>'js:uploadSuccess' 吧?

  • 评论于 2012-05-23 18:24 举报

    为什么我按照这上面的配置,但是页面里面什么都没有?希望大家帮帮忙。
    我的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(); ?>
    
您需要登录后才可以评论。登录 | 立即注册