1. return  $this->goBack();
    // 先看看Yii::$app->user->returnUrl是否已经设置, returnUrl没有设置且goBack()中的参数也未设置则会返回到homeUrl指定的地址。
    //Yii::$app->user->setReturnUrl(\Yii::$app->request->referrer);
    return $this->goBack(\Yii::$app->request->referrer); //比如修改页面,修改失败则可以使用这个返回之前修改的页面,配合session使用,给出提示信息。
    可以使用$session = \Yii::$app->session; $session->setFlash('editmsg', '修改失败,请重试'); 给出提示信息 在页面中可以使用如下代码显示提示信息。
    <?php if(\Yii::$app->session->hasFlash('editmsg')):?>
    <div class="btn-danger"><?=\Yii::$app->session->getFlash('editmsg')?></div>
    <?php endif; ?>
  2. findOne()可以使用数组作为查询条件,使用的是关联数组,键对应的是数据库里的列,值对应的是数据库里的值。如果是标量数组,那么数组值都将作为主键查询,where id in (v1, v2...)。
  3. Active Record 的属性以区分大小写的方式为相关联的表列命名的。 Yii 会自动为关联表的每一列定义 Active Record 中的一个属性。 您不应该重新声明任何属性。
    // 在活动记录里的方法,用来转换数据库里updatetime格式
    public function getUpdatetimeText()
    {
    return date('Y-m-d', $this->updatetime);
    }
    //控制器中的方法,当查询的时候,就可以调用此方法 e.g:
    public function actionTest()
    {
    $time = Category::findOne(['sort'=>10]); //正常查询,可以使用非主键作为查询条件,但必须是关联数组
    echo $time->updatetime, '<br/>'; //这个输出的是数据库里的格式,yii自动定义这个属性,不需要在模型中人为定义,直接可以使用
    echo $time->getUpdatetimeText(),'<hr/>'; //这个按照自定义格式输出
    echo $time->updatetimeText; //同样按照自定义格式输出,这个就是getter,任何以get开头的方法,称为读取器,可以像使用属性一样使用,还有setter,但是使用属性比使用方法效率低一些
    //使用getter和setter条件是需要继承 yii\base\Object 或其子类,注意:如果设置getter时,get后面的命名和属性名相同,getter将不会生效。
    $t = new Category();
    echo $t->getUpdatetimeText(); //new 这个输出的数据是1970-01-01,并不是数据库里的数据,格式虽然正确,我想应该是因为new ,代码认为是将要添加数据库里的数据,
    没有值,所以按格式输出1970-01-01(目前还不是很清楚这个原因,猜想)
    }

    下面是yii baseObject 类的部分源码,可以借鉴学习。(getter)

    public function __get($name)
    {
    $getter = 'get' . $name;
    if (method_exists($this, $getter)) {
    return $this->$getter();
    } elseif (method_exists($this, 'set' . $name)) {
    throw new InvalidCallException('Getting write-only property: ' . get_class($this) . '::' . $name);
    } else {
    throw new UnknownPropertyException('Getting unknown property: ' . get_class($this) . '::' . $name);
    }
    }
  4. 通过 Active Record 对象获取数据十分方便灵活,但是当获取大量数据时候,将导致大量内存占用。查询方法前调用 asArray() 方法,以数组形式返回结果。虽然这种方法可以节省内存并提高性能,但是返回的列值都是以字符串的形式返回。asArray 方法将会失去activeRecord的一些功能。
  5. 数据验证: save 方法默认会自动调用validate方法进行数据验证。如果不需要验证则可以传false给save,e.g:save(false)跳过验证。$models->errors可以获取验证错误的信息,成功返回空数组。
  6. 更新浏览量字段可以使用updateCounters()方法,文档中说使用save方法更新计数字段会出现错误,比如并发的情况,数据更新会发生错误。但是updateCounters这个方法是什么原理目前还不知道。
  7. getter 和 setter: 只定义了 getter 没有 setter 的属性是只读属性。尝试赋值给这样的属性将导致 yii\base\InvalidCallException (无效调用)异常。类似的,只有 setter 方法而没有 getter 方法定义的属性是只写属性,尝试读取这种属性也会触发异常。使用只写属性的情况几乎没有。

最新文章

  1. .gitignore过滤个人配置
  2. 利用Object.prototype.toString方法,实现比typeof更准确的type校验
  3. 从新 开始学习java
  4. CSS3 @keyframes 语法
  5. 解决PyGObject在pydev下报错的问题
  6. 读取oracle页面或者进程卡住不动(死锁)
  7. ASP.NET中的ExecuteNonQuery()方法的用法
  8. 解决IIS网站.woff 404 (Not Found)问题
  9. WEB中调用Nutch执行JOB抓取
  10. struts加载spring
  11. C++/C高质量编程指南-笔记
  12. Docker Weave 命令整理
  13. centos 7 修改系统屏幕分辨率
  14. 初级安全入门——XSS注入的原理与利用
  15. 转 ImageMagick及PHP的imagick扩展的安装及配置
  16. Oracle统计每条数据的大小
  17. SUST OJ 1642: 绝地求生—死亡顺序
  18. Inf2Cat应用的参数使用详细介绍
  19. 年薪30万的Android程序员必须知道的帖子
  20. 【前端】Vue.js实现简单价格计算器

热门文章

  1. 【计算机网络】-网络层-Internet的网络层
  2. PAT A1042 Shuffling Machine
  3. django进阶版1
  4. 【hash】A Horrible Poem
  5. 最全最新java面试题系列全家桶(带答案)
  6. 将磁盘从FAT格式转换为NTFS格式的方法
  7. nop4.1学习ServiceCollectionExtensions(一)
  8. MFC六大核心机制
  9. 用最少的JS代码写出贪吃蛇游戏---迷你版
  10. Flask框架学习篇(一)