CookbookにCakePHP1.3移行ガイド
いつの間にかCakePHP公式サイトのCookbookにもCakePHP1.3のページが掲載されていますね。
CakePHP1.3はまだ正式版じゃないけど、そろそろ目を通しておこうかなぁ
いつの間にかCakePHP公式サイトのCookbookにもCakePHP1.3のページが掲載されていますね。
CakePHP1.3はまだ正式版じゃないけど、そろそろ目を通しておこうかなぁ
コントローラ内で実行されたコントローラ名やアクション名を取得するには、以下のようなメンバー変数が用意されています。
$this->name $this->action $this->here
まとめて全部取得したいなら、$this->paramsを使いましょう。
$this->params
これなら、アクションに渡されたパラメータも全部確認できますね。
Helperから別のHelperを呼び出すには、Controller と同じように、メンバー変数の $helpers で指定するだけです。
覚えやすいですね。
<?php
/* /app/views/helpers/link.php (using other helpers) */
class LinkHelper extends AppHelper {
var $helpers = array('Html');
function makeEdit($title, $url) {
// HTML ヘルパーを使用して整形されたデータを出力する
// データのフォーマット:
$link = $this->Html->link($title, $url, array('class' => 'edit'));
return $this->output("<div class=\"editOuter\">$link</div>");
}
}
?>

2010年1月29日にCakePHP 1.2.6 の安定版がリリースされていますね。
今回のリリースはバグフィックスがメインのようです。
CakePHP 1.3 の方も、すでにAPIが用意されているし、順調にバージョンアップしていっているようですね。
今後も楽しみです。

よく使うので忘れないようにメモ。
afterFindで取得した値を整形して返す。
class MyModel extends AppModel {
var $name = 'MyModel';
// find時にデータを整形
function afterFind( $results ) {
foreach ( $results as $key => $val ) {
if ( isset( $val[ $this->name ][ 'zip' ] ) ) {
// zipをハイフンで分割して取得
$aryZip = explode( '-' , $val[ $this->name ][ 'zip' ] );
$results[ $key ][ $this->name ][ 'zip1' ] = $aryZip[0];
$results[ $key ][ $this->name ][ 'zip2' ] = $aryZip[1];
}
}
return $results;
}
}
Helper クラスを見てみると、下記のように View オブジェクトを使っているところがいくつもあります。
function modelID() {
$view =& ClassRegistry::getObject('view');
return $view->modelId;
}
自前の Helper でも同じようにすれば View を使うことが出来ます。
HelperでaddScriptを使うことも出来ます。
class MyHelper extends AppHelper {
// Javascript Helper を使う為に必要
var $helpers = array( 'Javascript' );
function hoge() {
// View オブジェクトを使う為に必要
$view =& ClassRegistry::getObject('view');
$code = <<< CODE
// JavaScript
CODE;
$view->addScript( $this->Javascript->codeBlock( $code ) );
}
}
あとは View から Helper を呼び出すだけ。
<?php echo $my->hoge(); ?>
CakePHPで画像を表示したり、リンクを張ったりするにはHtmlHelperというのを使います。これは、ビューで利用できるオブジェクトで、HTML関連の便利なメソッドがたくさん容易されています。
HTMLで直接画像リンクのタグを書くのは容易ですが、CakePHPには画像のリンク用のメソッドは用意されていないみたいなので、二つのメソッドを組み合わせてビューに出力します。
一つはリンクタグを生成する為のメソッドです。
<?php echo $html->link( 'リンク文字' , 'リンク先URL' ); ?>
もう一つは画像タグを生成する為のメソッドです。
<?php echo $html->image( '画像のパス' ); ?>
これを組み合わせて画像のリンクを作ります。
<?php echo $html->link( $html->image( '画像のパス' ) , 'リンク先URL' );
ただし、このまま組み合わせると特殊文字がHTMLエンティティに変換されてしまうので、オプションをつけてHTMLエンティティに変換されないようにします。
<?php echo $html->link( $html->image( '画像のパス' ) , 'リンク先URL' , null , null , false );
なんだか面倒ですが、今のところ他に方法が見つかりませんでした。
また新しい方法が見つかったら追記したいと思います。
登録時に数秒メッセージを表示させて指定したページにリダイレクトさせる場合、コントローラに
$this->flash( '登録しました。' , '/' );
のように書くのですが、なぜがメッセージ表示後に自動的にリダイレクトしなくてちょっとだけハマりました。
特殊な設定が要るのかなと思いマニュアルを見ましたが、特に記述がありません。
いろいろ調べてみると、どうやらdebugモードが1以上の場合はリダイレクトしないようになっているみたいです。
app/config/core.php
Configure::write('debug', 0);
そういうことはマニュアルに書いといてください!><
今更ながら、このブログの方針を決めておこうと思います。
このブログをはじめたきっかけは、最初はCakePHPというフレームワークを知り勉強しようと思ったからなのですが、ブログを設置した後、ブログもCakePHPの勉強も数ヶ月放置状態になってしまっていました。
しかし、最近始まったプロジェクトでCakePHPを使うことになったので、これを期にブログをリニューアルし、実際に仕事で得た情報をメモやチュートリアルとしてブログに書いていこうと思います。
すでに記事をいくつか書いていますが、しばらくはメモのように断片的な情報を集めて、ある程度まとまったらアプリを作っていこうと思います。作ったアプリはソースを公開します。
ソースや記事に対するダメだしやアドバイスは、いただけると大変ありがたいので、CakePHP経験者の方や、そうじゃない方も大歓迎なので遠慮せずコメント書いてくださいm(__)m