• phalcon遇到的那些坑


    1.数据重复插入

    数据被重复插入,一般是在index/index方法中进行数据库insert操作,会发现一条数据被重复插了一次。

    原因:浏览器有时候会自动请求 /favicon.ico ,而你的网站并没有这个文件,恰好默认路由又无法匹配这种带有"点"的路径,所以呢,就被当作无匹配的路径了,这时候就会进入defaultController/defaultAction了,相当于多请求了index/index,从而造成插入两次数据。

    解决:为路由服务添加 notFound 配置,例如:$router->notFound(array('controller'=>'httperr','action'=>'err404'));其中httperr和err404是自己创建的控制器和方法。这样当路由匹配不到路径的时候,就会进入这个控制器,而不会进入默认控制器了,问题得以解决。

    <!-- lang: php -->
    $router->add('/',array(
      "controller"=>'index',
      "action"=>'index'
    ));
    $router->notFound(array('controller'=>'httperr','action'=>'err404'));
    2.大小写问题

    目前可以确定的是 url中控制器大小写不敏感,框架会自动转为驼峰式再去找类,需要注意的是dispacther::getControllerName()是和url中一致的,不会转换成标准模式。 视图目录名,应该是统一小写。 自定义路由规则的时候模块名匹配是区分大小写的,请注意。

    3.字段元数据缓存

    默认框架会在第一次查询该表时,会查询表结构信息,然后缓存在内存中,在本次请求中再次查询该表就不用再通过sql查询表结构了。但是在复杂逻辑下,由于使用到多个模型,其表结构查询所带来的时间消耗占了总查询时间的10%~%50左右,所以有必要做一个落地缓存,将表结构信息缓存到文件或者memcache、redis中,只是要记得,在修改过表结构后,要清空相关缓存。

  • 相关阅读:
    代理模式
    观察者模式
    策略模式
    Unity 常用常找的东西存放
    Unity中一键创建常用文件夹
    Unity中Oculus分屏相机和普通相机一键切换
    Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
    Java并发和多线程3:线程调度和有条件取消调度
    Java并发和多线程3:线程调度和有条件取消调度
    Java并发和多线程2:3种方式实现数组求和
  • 原文地址:https://www.cnblogs.com/xiaoleiel/p/8295240.html
Copyright © 2020-2023  润新知