エンジニア引き止めセミナー資料
エンジニア引き止めセミナー資料

cake1.3.3にしたら動かなくなった

まっちー

現在絶賛開発中のサービスがあるんですけど、最初はcakephpの1.3.0で開発してたんですが、1.3.3にしてみようと上から言われまして、cakeフォルダの中身だけ変えてみたんですよ。

そしたらま~……いろいろと動かなくなりました。いろいろなところでWarningって言われたり言われなかったり……何も表示されなくなったりならなかったり。

とりあえず、そのうちのいくつかをここに書いておこうと思います。

$this->renderElementがなくなった

ビューのエレメントを呼び出すとき、renderElement()ってメソッドを今まで使ってましたが、こいつがどうやらなくなったらしい。なくなったというか、正確には$this->element()というメソッドに変わったらしい。renderElementっていうメソッド名、結構気に入ってたのになぁ……。

フォームヘルパーのshowEmptyもなくなった

たとえばフォームヘルパーでセレクトボックスを作る場合、空のオプションを出さないようにするにはこんな書き方をしていたと思います。

echo $form->select('column', $select, null, null, false);

でも、この第5引数がなくなったみたいです。上と同じような挙動をさせるには、今度は第4引数に記述する必要があるみたい。

echo $form->select('column', $select, null, array('empty' => false));

まあ、ダメ……ではないけど、いきなり変ると戸惑っちゃいますね。あれ? 何で空のオプションがなくならへんのん? ってね。

$model->del()までもなくなった

DBのデータを消す際に使っていたdel()がなくなって、今度からはdelete()一色になったみたいです。まあ、そんなに大きくは変わらないけど、普通にdel()を使っている部分があったので、ちょい直しが必要だった。

$session->flash()はechoしてあげないといけない

今までは$session->flash()って書いとくだけで、必要なメッセージが出力できてたんですけど、今度からはechoをつけてあげないとダメみたいです。正直、最初は何で出なくなったのか全然分からなかった。

デバッグログはデフォルトでは見れない

core.phpの中でConfigure::write(‘debug’, 2)にしておけば、今までは何事もなくSQLログとか見れていたんですけど、今度からはちゃんとビュー側で必要なビューファイルを呼び出してあげないといけないみたい。

echo $this->element('sql_dump');

さっそくrenderElementじゃなくなったってのを活かすときが来ましたね。

ちなみに、/cake/libs/view/elements/にデフォルトでsql_dump.ctpが入っているのですが、これをapp側に持って来ていろいろとカスタマイズしても良いみたいです。例えばFirefoxで開発してるなら、ログをFirebugのコンソールに出力させることもできる。今まではプラグインを使わないと実現できなかったんですけど、これからはお手軽にFirebugで見られるようになったみたいですね。

カスタマイズの方法は、sql_dump.ctpの以下の部分を書き換える。50行目付近かな……?

$i) :
		echo "<tr><td>" . ($k + 1) . "</td><td>" . h($i['query']) . "</td><td>{$i['error']}</td><td style="text-align: right">{$i['affected']}</td><td style="text-align: right">{$i['numRows']}</td><td style="text-align: right">{$i['took']}</td></tr>n";
	endforeach;
?>

↓

 $i) :
		echo $this->Html->scriptBlock('console.log("' . $i['query'] . '")');
	endforeach;
?>

ただ、個人的にはちょっと見づらい気がする。

今回引っかかったところは、こんなところですかね。

その他いろいろ変わってるところは、Cake1.3移行ガイドとかを見れば分かると思います。僕もまだ全部は見てないので、また何かあったら追記するかもです。

3 0 0 0