Cakephpのよく使う処理をまとめる

初心者がCakephpをやる件、ガシガシと進めています。
難しい処理は後回しにしてDBの出入力を中心に目標の7割方できてきました。
DBに関わる処理はselect、insert、deleteなど限られるわけですが、あちこちからコピペしたためか、全体的に記述が統一されていません。
ここで復習を兼ねて全ソースを見直し、整理して自分なりの構文をまとめてみました。

●値の取得(複数)

条件に合致した値を取得してviewに渡す処理。
$cond = array('post.user_id' => $this->Auth->user('id'));
$data = $this->Post->findAll($cond, null, 'Post.created desc');
$this->set("data", $data);

・findAll(条件式,取得フィールド(nullで全て),取得順序)
・例はAuthComponentでログインしたユーザーと同じidのPostデータを取得。
なお上2行はこっちでも同じ処理。わかりやすいかもしれない。
$data = $this->Post->findAllById($this->Auth->user('id'), null, 'Post.created desc');
findAllByIdAndPasswordというand条件にしても直感的でわかりやすい。

●値の取得(1件のみ)

条件に合致した値を1件のみ取得する。パラメタを指定してのedit、deleteのときによく使う。
function edit($id){
$this->Post->id = $id;
$data = $this->Post->read();

なお上2行はこっちでも同じ処理。わかりやすいかもしれない。
$data = $this->Post->findByid($id);

●DBへのデータ保存

insertのとき
$data = array(
'Post' => array(
'title' => $this->data['Post']['title'],
'body' => $this->data['Post']['body'],
'post_date' => $this->data['Post']['post_date'],
)
);
$this->Post->save($data)

updateのとき
$data = array(
'Post' => array(
'title' => $this->data['Post']['title'],
'body' => $this->data['Post']['body'],
'post_date' => $this->data['Post']['post_date'],
)
);
$this->data['Post']['id'] = $id;
$this->Post->save($data)

updateのときはidを指定する。
また更新する値だけを$dataに記述しないと、任意の値を書き換えられることになるのでセキュリティ的に問題あり。
色々と試行錯誤してきたけど、難しいことしなければこれだけで済むのか・・・。
ソースコードの見直し(リファクタリング)も楽だったし。
cakephpすげー。

PHP開発環境にEclipseをセットアップ

初心者がCakePHPを学ぶ件、今回は開発環境について。
これまではお手軽な開発環境「PHPエディタ」を使用していました。
PHPエディタ – フリーのwindows用php統合開発環境 – phpspot
インストールや設定もわかりやすく良かったのですが、新規ファイル作成をする際はPHPエディタ上で行わなければならないという欠点がありました。
また、もう少しプロっぽい開発環境を使ってみたくもあり代表的なPHP統合開発環境を調べてみました。
PHP開発ツール 比較調査 – KABOSU
商用、無料を含めた開発ツールが比較されています。
こちらで無料かつオススメとされていたPDT(Eclipse PHP Development Tools)にチャレンジします。

続きを読む

CakePHPのAuthComponent実装+ブラウザ閉じても認証保持

初心者がCakePHPを使った開発を進めます(これまでのCakePHP)。
CakePHPガイドブックを参考に基本的なアプリができたので、これを自分色に染めていきます。
まず認証周りを強化したい。そこでCakePHPの1.2から用意されたAuthComponentという認証に便利なコンポーネントを実装してみました。
参考サイトは下記。ここのコードをコピーすれば基本的に問題ありません。
【CakePHP】AuthComponentについてのまとめ 【ざっくり基本編】 | ねねとまつの小部屋
【CakePHP】AuthComponentについてのまとめ その2【ちょっとしたコツ編】 | ねねとまつの小部屋
あとCakePHPの公式マニュアルも詳しいです。
The Cookbook :: 1.2 Collection :: マニュアル :: 組み込みのコンポーネント :: 認証
ただ、小生の場合はCakePHPガイドブックにあったSessionでの認証を実装していたので、それを外す作業が必要でした。
以下自分メモ。ガイドブックからの変更点など。

続きを読む

CakePHP初心者がSubversionを使う。

初心者がCakePHPを始める件、CakePHPガイドブックのサンプルをなぞる作業も終わり、いよいよ自分の思い描くウェブ・アプリの開発となります。
ここからは後戻りができない未知の領域。色々とイジっているうちに機能を壊してしまうこともあるでしょう。
かといって、バックアップとして「コピー ~ フォルダ(2)」を次々と作成していくのも馬鹿げている。
そこで以前より小耳に挟んでいたバージョン管理システム「Subversion」(Wikipedia)を使ってみることにしました。
色々と調べるとSubversionはファイルの改版(修正)ごとの差分を管理するシステムで、改版履歴を遡ってファイルを元に戻すことができ、また差分をサーバで管理するので複数人での共同作業でも更新衝突を防げるなど、現在のシステム開発には必須の存在のようです。
Subversionを使うにはサーバ(リポジトリ)とクライアントが必要で、Windows用クライアントソフトはTortoiseSVNが標準のようです。
TortoiseSVNのインストールと設定
サーバについては自分で立てる他に、サーバを提供しているサービスを利用することもできます。
比較検討の結果、小生はバックログを利用することにしました。
ここはBTS(Bug Tracking System)を中心に、Wiki、Subversionを提供しており、デザインや機能も洗練されていて非常に使いやすいです。
マニュアルも丁寧・親切。マニュアル・運用紹介 | バックログ
以下、試行錯誤して自分なりにまとめた手順を画面キャプチャで紹介します。
興味・関心の無い方はスルーの方向で。
参考
hiromasa.zone :o) >> TortoiseSVN でファイルのバージョン管理をしてみる (2)
人力検索はてな(「はてな検索」で質問した。たいへん助かった)

続きを読む

CakePHP1.2にバージョンアップ

初心者がCakePHPの勉強を始める件、時間が空いてしまいましたがCakePHPガイドブックを6章(コントローラー)、7章(モデル)、8章(ヘルパー)と進めています。
書籍の実装例をなぞっているだけですが、一通りの流れを把握し書籍サンプルであるブックマークプログラムが完成しました。
そんな中、CakePHP1.2のバージョンがあがってきたので、1.1からアップデートすることにしました。
(あわせてUSBメモリでの開発はあまりにも重くなったので、限界を感じ素直にPCローカルに再インストール)

●CakePHP1.2の導入

appフォルダはそのままに、Cakeフォルダを入れ替えます。
Cookbook :: 1.2 Collection :: マニュアル :: CakePHPによる開発 :: インストールの準備

●CakePHP1.2の設定

・Security.saltの設定
ハッシュ値を適当に変更しろとのこと。
おいしいCakePHP! エッセンスはFlash/Flex Security.saltの設定
・DB設定
app/config/database.php.defaultをいじる。
おいしいCakePHP! エッセンスはFlash/Flex データベースの設定
1.1では問題なかった文字コードでなぜかはまる。
注意点
・app/config/database.php→’encoding’=>’utf8′
・phpでのSET NAMESは不要
・app/views/layouts/default.ctp→charset=UTF-8
・MySQLはutf8_unicode_ci
インストールが正常に完了するとこんな画面が表示されます。
システムオールグリーン
cakephp1.2.png

●CakePHP1.1からの変更点

参考にしているCakePHPガイドブックはCakePHP1.1準拠のため、色々と異なる部分があります。
・テンプレート拡張子がthtmlからctpになった。
・bake.phpからBakeコマンドになった。
・入力エラーメッセージの表示方法が変わった。
CakePHP1.1の場合
<?php echo $html->tagErrorMsg("User/login","メールまたはパスワードが違います");?>
CakePHP1.2の場合
<?php echo $form->error('User/login');?>
エラーメッセージはモデルのバリデーションmessageで設定する。
エラーメッセージを直接指定する場合
<?php echo $form->error('User/login','メールまたはパスワードが違います');?>
・selectの作り方
CakePHP1.1の場合
<?php echo $html->selectTag("Bookmark/User_id",$user_list,$user_id,array("multiple"=>"multiple"),null,false);
?>

CakePHP1.2の場合
<?php echo $form->select("Bookmark/User_id",$user_list,$user_id,array("multiple"=>"multiple"),null,false);
?>

書式
$form->select(DBフィールド,表示配列,selected,array("multiple"=>"multiple"),null,false);
・はまった1
modelのvalidateが大きく変更になった。
CakePHP1.1の場合
var $validate=array(
'user_id'=>VALID_NOT_EMPTY,
'url'=>'/^http:\/\/|^https:\/\//',
'count'=>VALID_NUMBER
);

CakePHP1.2の場合
var $validate=array(
'user_id'=>array(
'rule'=>VALID_NOT_EMPTY,
),
'url' => array(
'rule' => array('url'),
'allowEmpty' => false, //空の値を許すかどうか
'message' => 'エラー時にhelperが出すメッセージ',
),
'count' => array(
'rule' => array('numeric'),
)
);

・はまった2
検索でfind()の比較演算子を使う箇所がセキュリティ対策で変更になった。
これは超はまった
1.1:$cond['url']="LIKE %".$this->params['form']['url']."%
1.2:$cond['url LIKE']="%".$this->params['form']['url']."%";
1.1:$cond['count']=">=".$this->params['form']['count'];
1.2:$cond['count >=']=$this->params['form']['count'];

配列のkeyの方に比較演算子を書くようになっている。

余談

実は上記の内容は7月上旬に書き溜めていたもの。
ここで仕事が急に忙しくなり、また夏期休暇の旅行などで学習時間が確保できないまま2ヶ月あいてしまいました。
9月に入ってようやく勉強を再開しようとしたところ、ソースコードが全く読めない!!!!!
1ヶ月前は他人を身に染みて感じています。
さて、どうするか・・・。
もう一度、他のチュートリアルをやり直すか・・・。
CakePHP guide  » CakePHP で作る Web システム

  • 他のブログ

    育児で買ったモノたち
  • Twitter

  • 最近の投稿

  • 最近のコメント

  • はてなブックマーク

  • RSS購読

    RSS Feed RSS - 投稿

  • カテゴリー

  • 月別

  • カレンダー

    2017年5月
    « 3月    
    1234567
    891011121314
    15161718192021
    22232425262728
    293031  
  • プロフィール


    健康・医療系の出版社でウェブに関わる営業企画と浅い技術。Webディレクター?
  • キーワード検索