CakePHP2.5.0 がリリースされました。それにともない、既存のコードが動かなくなる場合があるのでメモしておきます。

※(下記参照: 2.5.1で対応される模様です) -> (されました)

バージョンを上げるとおかしくなるのは珍しいことじゃないですが、今回は CakePHP の bake コマンドで自動生成したコードが動かなくなってしまうので、そのように作成したファイルはもちろん、それをお手本にして作成したコードにも不具合が発生してしまうことになります。

具体的には、 FormHelper::postLink() のコードが変更になり、第3パラメータで null を渡すと

Unsupported operand types

というエラーが発生するなどして処理が中止されてしまいます。

本来は FormHelper::postLink() のコメントにもあるように、ここには null を渡すべきではありません。

しかし、bake のテンプレートがそれに従っていなかったため、公式チュートリアルに則って bake したコードやそれを参考にしたコードが動作しなくなってしまった — ということです。(form 作成用と view 作成用に問題があり、index.ctp作成用のテンプレートは過去のバージョンで修正済みでした)

対処の方法としては、 FormHelper::postLink() による吸収は望み薄(PRしましたが却下 )なので、各自ビューファイルを修正しましょう。(※PRは一旦取り下げられましたが、その後に対応となりました)

(あるいは 2.4.x までに留めておく・・・?)

修正は単に null を array() に変えるだけです。該当箇所が bake したままなら、 grep すればすぐに終わると思います。

修正の例

修正前

$this->Form->postLink(__('Delete'), array('action' => 'delete', $post['Post']['id'], null, __('Are you sure you want to delete #.....

修正後 (第3引数の null を array() に変える)

$this->Form->postLink(__('Delete'), array('action' => 'delete', $post['Post']['id'], array(), __('Are you sure you want to delete #.....

 

追記(2014/05/14)

その後、FormHelper::postLink() において、上記の問題を吸収するための変更がなされ 2.5.1 のマイルストーンにセットされました。

https://github.com/cakephp/cakephp/pull/3484

以上です。