CakePHP 2.x => 3.x 升級(jí)手順
一、Controller層
1.find('list')
原2.x中該方法通過(guò)指定option中的'fields'來(lái)實(shí)現(xiàn)key=>html' target='_blank'>value
3.x通過(guò)option中的'keyField'和'valueField'來(lái)替換,返回值需要用toArray()進(jìn)行轉(zhuǎn)換
2.find('first')、find('count')
3.x中已經(jīng)完全廢棄掉這兩個(gè)參數(shù),而使用find()->first()以及find()->count()進(jìn)行替換
3.find查詢關(guān)聯(lián)表時(shí),必須添加'contain'屬性,Cake 3.x 默認(rèn)不會(huì)將表關(guān)聯(lián)在一起
4.findById
**?沒(méi)有找到相關(guān)文檔?**
2.x中findById格式為($id,array $fields)
3.x中可能只有一個(gè)參數(shù)($id),需要通過(guò)select(array $fields)方法來(lái)篩選數(shù)據(jù)
5.Component->initialize()
2.x通過(guò)initialize(Controller $Controller)獲取調(diào)用該Component的Controller
3.x改變了initialize的參數(shù)變?yōu)閕nitialize(array $config),通過(guò)$controller = $this->_registry->getController();獲取
6.SessionComponent
3.x廢棄掉了該Component而改用$this->request->session()替換
二、Model層
1.Associations
2.x通過(guò)定義屬性來(lái)實(shí)現(xiàn)關(guān)聯(lián)
3.x需要在Table中的initialize方法中調(diào)用$this->belongsTo、$this->hasMany、$this->belongsToMany、$this->addAssociations等方法來(lái)實(shí)現(xiàn)
2.Validation
2.x通過(guò)定義validate屬性實(shí)現(xiàn)數(shù)據(jù)驗(yàn)證
3.x需要在Table中定義validationDefault(Validator $validator)方法來(lái)實(shí)現(xiàn)
3.virtualFields
3.x中廢棄了這個(gè)屬性,如需使用,需要在Entity中追加方法
例如 需要A表定義虛擬字段 full_name
首先要在A表的Entity中追加 protected function _getFullName()
然后將 full_name 添加到$_accessible中
使用時(shí)A->find 后該值只可通過(guò)object->property的方式獲取,無(wú)法通過(guò)數(shù)組方式獲取
4.field()
**?沒(méi)有找到相關(guān)文檔?**
3.x可能廢棄了該方法可以用get()方法替換
5.ClassRegistry::init()
3.x廢棄該方法需要用TableRegistry::get()替換
6.Mysql別名設(shè)定
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的表關(guān)聯(lián)查詢時(shí),如果需要指定fields則必須在fields中加入關(guān)聯(lián)鍵???
此升級(jí)手順會(huì)持續(xù)更新中~~~~~~
PHP編程鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選