ThinkPHP5踩过的坑

01:redirect函数在框架初始化方法中无效 当初做权限控制,在initialize判断是否有权限,如果无权限就执行跳转,跳转的函数是redirect,但是无论如何都无法跳转出去,当时的版本是5.0+,手册还不太完善,后来得知必须得 return $this->redirect();才可以跳转(重定向); 完整代码:

if(!oAuth($uid)) return $this->redirect($url);

02:分页参数的问题 如果是普通分页没毛病,但是分页后面有其他参数,比如条件查询后分页,点击下一页的时候参数就不见了,解决办法: 分页的第三个参数传: ['query'=>request()->param()] 完整代码

Db::User
->where($where)
->order($order)
->paginate(
    $pageSize, //每页的数量
    false, //是否简洁分页  关简洁分页很简单,简洁分页不会查询总条数,相对来说应该会比较快一点点,他只有上一页和下一个的按钮
    ['query'=>request()->param()]); //额外的参数

03:验证器中唯一验证 场景:一个手机号码只能注册一次,但是编辑的时候可以用当前的手机号码!

验证器代码:

    protected $rule = [
        'mobile' => 'require|mobile|unique:user,mobile',
        'email' => 'require|email|unique:user,email',
    ];

    protected $message = [
        'mobile.require' => '请输入手机号码!',
        'mobile.mobile' => '手机号码格式错误!',
    ];

但是在更新的时候会提示手机号码已经存在了,挺气的,当时找资料没找到,就看日志了,最后在日志中找到了; 原来只要在更新的时候再个验证器传入数据的时候将ID也传进去就可以了,验证器内部会自动排除主键为当前ID的数据;

04:模型的关联方法 在之前在每次查询的时候,都会使用动态关联延迟预载入:with 后来发现不写居然也可以,如果不写就不会执行关联查询,在视图中调用的时候直接使用也是可以了 比如:文章对应发布者:

public function article($id)
{
    return $this->find(id);
    //之前的写法    return $this->with('user')->find($id);
}

public function user()
{
    return $this->hasOne('User','id','uid');
}


//在模板中
{{$article.user.nickName}}

更多的以后再写

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • vue中使用viewerjs

    删掉生成的项目里面的helloWord.vue 修改路由 创建一个index.vue

    李昊天
  • 使用electron制作满屏心特效

    这样就会让窗口全屏 但是有一个问题 就是这样做界面不会正确响应 我们可以使用进程通信去解决

    李昊天
  • NSIS 打包 Electron 生成exe安装包

    每次文章都从0开始 从搭建开始 使用的是electron-vue 毕竟方便一点 如果只想安装electron 请参见我的另一个文章https://segment...

    李昊天
  • 【优步谷歌“复婚”,行业或遭大洗牌】Uber支付2.45亿美元股权,谷歌投资Uber未来

    编辑:小七 【新智元导读】经过一年的诉讼之后,优步和Waymo之争,终于告一段落。优步于本周五表示,公司已经和Waymo达成商业机密盗窃诉讼的和解,将不再使用W...

    新智元
  • Tomcat 端口号修改

    修改Tomcat的端口号:    在默认情况下,tomcat的端口是8080,如果出现8080端口号冲突,用如下方法可以修改Tomcat的端口号: 首先: 在T...

    似水的流年
  • Tomcat 端口号修改

       在默认情况下,tomcat的端口是8080,如果出现8080端口号冲突,用如下方法可以修改Tomcat的端口号:

    似水的流年
  • Tomcat 端口号修改

    修改Tomcat的端口号:    在默认情况下,tomcat的端口是8080,如果出现8080端口号冲突,用如下方法可以修改Tomcat的端口号: 首先...

    似水的流年
  • 【leetcode刷题】T195-3的幂

    https://leetcode-cn.com/problems/power-of-three/

    木又AI帮
  • POJ 3528--Ultimate Weapon(三维凸包)

    Ultimate Weapon Time Limit: 2000MS Memory Limit: 131072K Total Submissi...

    Enterprise_
  • 设计模式(4)[JS版]-JavaScript如何实现建造者模式?

    建造者模式(Builder)可以将一个复杂对象的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。也就是说如果我们用了建造者模式,那么用户只需要指定需要...

    AlbertYang

扫码关注云+社区

领取腾讯云代金券