CakePHP 2.x 升级3.0

CakePHP 2.x => 3.x 升级手顺

一、Controller层

  1.find(‘list‘)
    原2.x中该方法通过指定option中的‘fields‘来实现key=>value
    3.x通过option中的‘keyField‘和‘valueField‘来替换,返回值需要用toArray()进行转换

  2.find(‘first‘)、find(‘count‘)
    3.x中已经完全废弃掉这两个参数,而使用find()->first()以及find()->count()进行替换

  3.find查询关联表时,必须添加‘contain‘属性,Cake 3.x 默认不会将表关联在一起

  4.findById
    **?没有找到相关文档?**
    2.x中findById格式为($id,array $fields)
    3.x中可能只有一个参数($id),需要通过select(array $fields)方法来筛选数据

  5.Component->initialize()
    2.x通过initialize(Controller $Controller)获取调用该Component的Controller
    3.x改变了initialize的参数变为initialize(array $config),通过$controller = $this->_registry->getController();获取

  6.SessionComponent
    3.x废弃掉了该Component而改用$this->request->session()替换

二、Model层

  1.Associations
    2.x通过定义属性来实现关联
    3.x需要在Table中的initialize方法中调用$this->belongsTo、$this->hasMany、$this->belongsToMany、$this->addAssociations等方法来实现

  2.Validation
    2.x通过定义validate属性实现数据验证
    3.x需要在Table中定义validationDefault(Validator $validator)方法来实现

  3.virtualFields
    3.x中废弃了这个属性,如需使用,需要在Entity中追加方法
    例如 需要A表定义虚拟字段 full_name
    首先要在A表的Entity中追加 protected function _getFullName()
    然后将 full_name 添加到$_accessible中
    使用时A->find 后该值只可通过object->property的方式获取,无法通过数组方式获取

  4.field()
    **?没有找到相关文档?**
    3.x可能废弃了该方法可以用get()方法替换

  5.ClassRegistry::init()
    3.x废弃该方法需要用TableRegistry::get()替换

  6.Mysql别名设定
    2.x只需要在fields属性中加入as即可 如 ‘fields‘=>array(‘id as table_id‘)
    3.x如定义别名需要用加入key 如 ‘fields‘=>[‘table_id‘=>‘id‘]

三、View层

  (View层,从2.x的View文件夹搬迁到3.x的Template)

  1.$this->Html->url
    3.x中用$this->Url->build替代

四、Bug

  1. Associations
    hasMany的表关联查询时,如果需要指定fields则必须在fields中加入关联键???

此升级手顺会持续更新中~~~~~~

时间: 2024-10-13 16:40:27

CakePHP 2.x 升级3.0的相关文章

Centos 6.6 升级openSSH 远程访问版本(5.3升级7.0源码安装版)

由于服务器Openssh 版本过低,存在不安全因素,所以最近想把服务器都进行升级: 查看当前系统版本为6.6,openssh为5.3版本,此版本启用默认是开启了root远程功能的,因此我能直接通过ROOT进行远程访问. 话不多说,直接上传下载的OPENSSL7.0版本压缩包,需要的可以到http://www.openssh.com官网下载 上传后解压,tar zxf openssh-7.0p1.ta.gz ,然后进cd openssh-7.01p1 目录. ./configure --prefi

Android Studio升级到0.8.1后怎样设置字体大小?

升级到0.8.1后.打开设置字体大小页面.你会发现无论是Default还是Darcula,都不同意你改变字体的大小.事实上这个是由于这两个模式是Android Studio自带模式,所以不同意你修改,你要改的话要自己定义自己的模式.例如以下图: 选中一个你想要的样式,然后点击Save as,然后在弹出的对话框中输入你自定义的样式的名称. 然后再把Scheme name选择成你自己定义的样式,这个时候就能够改了.

windows 2008 r2 x64 离线升级PowerShell3.0 及打开WinRM模块

windows 2008 r2 x64  离线升级PowerShell3.0 及打开WinRM模块 bat脚本 echo off set apath=%~dp0 :: 如果运行提示找不到文件apath 写完整路径 echo "install net4.0" %apath%\dotNetFx45_Full_x86_x64.exe  /quiet /norestart start /w pkgmgr /iu:PowerShell echo y|powershell set-executio

Android Studio升级到0.8.1后如何设置字体大小?

升级到0.8.1后,打开设置字体大小页面,你会发现不管是Default还是Darcula,都不允许你改变字体的大小,其实这个是因为这两个模式是Android Studio自带模式,所以不允许你改动,你要改的话要自定义自己的模式.如下图: 选中一个你想要的样式,然后点击Save as,然后在弹出的对话框中输入你自己定义的样式的名称. 然后再把Scheme name选择成你自定义的样式,这个时候就可以改了. Android Studio升级到0.8.1后如何设置字体大小?,布布扣,bubuko.co

【Unity】近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享。

近期整理Unity4.x 项目升级Unity5.0 过程中出现的各种常见问题,与大家共享. 1:Unity4.x 项目中3D模型其材质丢失,成为"白模"? 解决方式:手工又一次赋值材质贴图. 2:Unity4.x 项目中的NavMesh 升级报错? "NavMesh asset format has changed. Please rebake the NavMesh data." ? 解决方式:依照字面含义,又一次对静态物体进行烘焙就可以. 3:Unity4.x

Laravel 4.2升级5.0遇到的奇葩问题

按官网向导操作 修改自己的composer.json配置 按官网向导 地址:http://laravel-china.org/docs/5.0/upgrade 所有操作都已经按向导一步一步完成 修改composer.json配置 "require": { "laravel/framework": "4.2.*", "cartalyst/sentry": "2.1.4", "barryvdh/lar

3分钟完成MongoDB2.6升级3.0

3分钟完成MongoDB2.6升级3.0 前言 Part1:写在最前 自从3.0版本起,MongoDB支持了WT存储引擎,这个引擎相对老的MMAPv1存储引擎来讲,具有更高的压缩比,且支持文档级并发控制.也正因为WT的优良特性,在MongoDB3.2版本起,WT存储引擎作为了默认存储引擎.本文将简述2.6升级3.0的过程和注意事项 实战 Part1:建议和清单 限制 要升级到3.0版本,首先现有集群必须是2.6版本.如果是早期的版本,则必须先升级到2.6版本才可以升级3.0版本.如果2.6集群已

android studio升级3.0版本,问题处理

android studio升级3.0版本,问题处理 问题1:编译版本与构建版本修改 compileSdkVersion : 26, buildToolsVersion : "26.0.2", gradle版本: distributionUrl=https://services.gradle.org/distributions/gradle-4.1-all.zip classpath 'com.android.tools.build:gradle:3.0.0' 问题2:apk名称配置调

python3 升级 pip9.0.1 到pip-9.0.3

python -m pip install --upgrade pip python3.5 升级 pip-9.0.3报错 You are using pip version 9.0.1, however version 9.0.3 is available.You should consider upgrading via the 'python -m pip install --upgrade pip' command. 看版本 pip -Vpip 9.0.1 from f:\python\l