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 システム

cakephpでscaffoldとbake.php

cakephpについてブログ更新は途絶えました(「初心者がCakePHPを遅々として進める。」)が、勉強は淡々と進めています。
今回はscaffold(「足場」?)機能について。
この機能を使うとCakephpがDBを解析し、テーブル操作が行える簡易画面を使えるようになります。
使い方はcontrollerに“var $scaffold;”とするだけ。
例:userテーブル
cake\app\controllers\users_controller.php

これで、userテーブルへのinsert、update、delete操作が可能なインターフェースが使えるようになります。
http://localhost/cake/users/view
http://localhost/cake/users/add
http://localhost/cake/users/edit
Scaffold1.gif
Scaffold2.gif
ただこの$scaffoldは動的生成になるので、カスタマイズするには不向きです。
そこでbake.phpを使うと、Model、View、Controlleの各種ファイルを自動生成してくれます。
雛形のファイルとなるのでカスタマイズも楽に行えます。
自動生成であるため、bake.phpを使う前提としてDBの構造が最初から固まっている必要があります。
従ってbake.phpの使い道は開発着手時の取っ掛かりといったものになるでしょうか。
また$scaffoldは開発初期での動作イメージの確認や管理者機能として使われるようです。
小生は学習も兼ねてbake.phpを使わずに全て手打ちで進めることにしました。
(DBの構造なんて最初っから決まってないし)
参考
$scaffoldを試してみる(CakePHP修行 #009) | IDEA*IDEA
CakePHP のおいしい食べ方: Windows上のXAMPP構成で bake.php を使う場合
CakePHP guide >> scaffolding と bake.php から学ぶ CakePHP

初心者がCakePHPを遅々として進める。

初心者がCakePHPに関して少しづつですが学習を進めています。
インストールを終え、次に公式サイトのプログチュートリアルに進みます。
付録 A. Cake ブログチュートリアル
手順通りに進めて雰囲気を感じる。
ぬー、オブジェクト指向は手続き型に慣れた身には難解。
以下ブログチュートリアルのまとめ。
●CakePHPには「規約」と呼ばれるいくつかの決め事がある。
テーブル構造から変数、ファイル名まで色々と決まりがある。
(それに準じて書くとCakePHPを最大限活用できる)
付録 C. Cake 規約
●CakePHPはMVCモデルである。
プログラムが、データ形式のModelと、見た目のViewと、動作のControllerに完全に分離している。

チュートリアル「ブログ・プログラムを作ろう」

・DB:”blog”を作成(DBの名前は自由)
・テーブル:“posts”(複数形。なんとyをiに変えてesの変則複数形も可)
・構造:‘id’‘modified’(編集時刻)、‘created’(作成時刻)フィールド推奨。

Model(モデル)をつくる。

/app/models/post.php
postsテーブルのモデルなのでpost.php(単数形)。
値のバリデーションなどを記述する。
//postsテーブルのモデルは単数形で頭文字は大文字。
class Post extends AppModel
{
var $name = 'Post';
}

Controller(コントローラー)をつくる

/app/controllers/posts_controller.php
postsテーブルのcontrollerなのでposts_controller.php(アンダーバー必須)。
動作に関するfunctionを記述する。
//postsテーブルのコントローラーは複数形の頭文字は大文字。
class PostsController extends AppController
{
var $name = 'Posts';
 function index()
 {
  //$postsにPostモデルのfindAll()の結果をセット
  $this->set('posts', $this->Post->findAll());
 }
}
View(ビュー)をつくる

/app/views/posts/index.thtml
postsテーブルのviewなのでpostsフォルダに保存し、ファイル名をアクション名にして、拡張子はthtml(CakePHP1.2以降は"ctp")。
中身は普通のPHP。
<?php foreach ($posts as $post): ?>
<tr>
<td><?php echo $post['Post']['id']; ?></td>
<td>
<?php echo $html->link($post['Post']['title'], "/posts/view/".$post['Post']['id']); ?>
</td>
<td><?php echo $post['Post']['created']; ?></td>
</tr>
<?php endforeach; ?>

実際に表示してみる

CakePHPはURLでメソッドを指定する。
http://localhost/コントローラ名/メソッド名/パラメータ1/パラメータ2/
チュートリアルのindexメソッドは下記のように呼び出す。
http://www.example.com/posts/index/
パラメーターのある例
http://localhost/users/view/3
以上でブログチュートリアル。
実は1回目にさらっと読んだだけではよくわからず、下記を見てから再度チュートリアルをやった。
連載:CakePHPで高速Webアプリ開発|gihyo.jp … 技術評論社
参考
"Blog チュートリアルにつまずいたら" フォーラム - CakePHP Users in Japan
(つまずいたら、というよりも補足事項たくさん)
PapuhなWEBLOG - CakePHPとデータベース データベースの準備
(命名規約について)

  • 他のブログ

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

  • 最近の投稿

  • 最近のコメント

  • はてなブックマーク

  • RSS購読

    RSS Feed RSS - 投稿

  • カテゴリー

  • 月別

  • カレンダー

    2017年4月
    « 3月    
     12
    3456789
    10111213141516
    17181920212223
    24252627282930
  • プロフィール


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