久しぶりにCakePHPを使用してみる - モデルのおさらい
使いそうなメソッドをメモしておく。
検索結果が連想配列だったり、永続化するデータの指定も連想配列なのは微妙だな。
コマンドラインから、自動でモデル生成してくれるなら、ORMにしてくれてもいいじゃないかと思います。
find
指定した条件を元に、情報を検索する。
//該当する情報をすべて返す。
$result = $this->Model->find('all', array(
'conditions' => array(
'Model.status' => 'pending',
)
));
//該当する情報の先頭を返す。
//limit、offsetを指定した方がいいかもしれない
$result = $this->Model->find('first', array(
'conditions' => array(
'Model.status' => 'pending',
)
));
//該当する情報の件数を返す。
$result = $this->Model->find('count', array(
'conditions' => array(
'Model.status' => 'pending',
)
));
オプション
$type
- all - 全件返す
- first - 情報の先頭の一件を返す
- count - 該当する件数を返す
- neighbors - 隣接する情報を返す
- list - リスト形式で情報を返す
- threaded - ツリー形式で情報を返す
$query
- conditions - 検索条件
- fields - 検索結果として返す項目リスト
- joins - 結合条件
- limit - 検索結果として返す情報の上限値
- offset - 検索結果のオフセット
- order - ソート条件
- page - ページ番号
- group - グループ条件
- callbacks - ビヘイビアのフィルター実行
read
該当する情報を取得する。
取得する項目を指定できる。
$fields = array('name', 'description');
$result = $this->Model->read($fields, $identifier);
if (is_array($result) === true){
//読込に成功した場合の処理
} else {
//読込に失敗した場合の処理
}
save
情報を保存する 。
保存する情報は連想配列で指定する。
$values = array(
'name' => 'foo',
'description' => 'bar'
);
$result = $this->Model->save($values);
if ($result !== false){
//保存に成功した場合の処理
} else {
//保存に失敗した場合の処理
}
saveField
情報を保存する。
項目名、値の順番で指定する。
第3引数で、値の検証を行うか指定できる。
なぜかデフォルトがfalse….。
$result = $this->Model->saveField('name', 'foo');
if ($result !== false){
//保存に成功した場合の処理
} else {
//保存に失敗した場合の処理
}
delete
対象の情報を削除する。
if ($this->Model->delete($identifier) === true){
//削除に成功した場合の処理
} else {
//削除に失敗した場合の処理
}
exists
対象の情報の存在チェックを行う。
if ($this->Model->exists($identifier) === true) {
//対象の情報がある場合の処理
} else {
//対象の情報がない場合の処理
}
validates
バリデーションルールを元に、項目の妥当性検証を行う。
妥当でない場合は、エラーメッセージを返す。
エラーメッセージは、項目名をキーに、複数のエラーメッセージが格納されている。
$result = $this->Model->validates();
if ($result !== true) {
foreach ($result as $key => $messages){
echo $key;
echo join('<br/>', $messages);
}
}
久しぶりにCakePHPを使用してみる - 設定から
CakePHPの最新バージョンをダウンロードしてくる。
今だと、2.1.1が最新のようだ。
CakePHPの動作確認
アーカイブを解凍して、プロジェクトのディレクトリに配置する。
次のApacheの設定を行う、設定ファイルを開いて、バーチャルホストの設定を追記する。
バーチャルホストの設定を普段はMAMPでやっているのテキストファイルで、ちまちまやるのがめんどくさい。
MAMPの有償版購入しててよかった。
Apacheの設定が完了し、CakePHPが動作するのか試したいので、ブラウザからアクセスする。
普通にアクセスできた。
Security.saltとSecurity.cipherSeedの変更
普通にアクセスして、ページが見れているけど、Security.saltとSecurity.cipherSeedでエラー出るし、データベースに接続できないと表示されているので、設定を変更する。
まず、Security.saltとSecurity.cipherSeedを変える。
確か、何でもよかったきがするけど、とりあえず動かしたいだけなので、一文字増やすだけにしました。
ファイルはapp/Config/core.phpを編集して、書き換えるだけ。
//先頭に「a」を追記
Configure::write('Security.salt', 'aDYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
//先頭に「0」を追記
Configure::write('Security.cipherSeed', '076859309657453542496749683645');
この状態で、サイドアクセスしてみる。
うん、メッセージが表示から消えた。
データベースの設定変更
MySQLにデータベースを作成し、ユーザーも作成する。
ユーザーには必要な権限を与えた。
設定ファイルはapp/Config/database.php.defaultをコピーして、database.phpとして保存する。
database.phpを開いてデータベース名、ユーザー名、パスワードを記述する。
datasourceはMySQLのままでOK。
これ、ドライバってRDBMSのしかないのかな?
Postgres、MySQL、SQLiteぐらいしか、ドライバ無いみたいなんだけど、KVSとかはどうするんだろう。
とりあえず、設定は完了したので、再度アクセスする。
データベースのメッセージも消えたので、大丈夫ぽい。
これで設定は完了した。
次は、アプリ作成に入る、なんにも決めていなけどとりあえずブログでいいや。
iScrollのスクロールバー
デフォルトでは垂直、水平ともに使用する設定になっている。
iScrollのスクロールバーはコンテナ要素の高さよりもコンテンツ領域の高さが大きくないと表示されない。
つまり、コンテナの高さが500pxの時に、コンテンツの高さが500px以下だと表示はされない。
逆に500px以上、例えば600px、700px以上だと表示される。
これは普通に考えると当たり前の普通の仕様です。
只、表示の確認でスクロールバーを表示させることができないので、
わざとcss側でheightを指定する必要がでてくる。
<div id="view">
<div class="wrappper">
<!--
コンテンツ領域
ここの領域が外のコンテナ要素の高さよりも、
コンテンツの高さが長くならないと表示されない
-->
</div>
</div>
スクロールバーのクラス指定
スクロールバーのスタイル指定をする場合は、scrollbarClassオプションを利用する。
次のように、scrollbarなどのように指定すると、iScroll内部で、垂直の場合は後ろにV、水平別の場合はHを追加してクラス指定される。
次のコードの場合、スクロールバーに適用されるクラスはscrollbarV、scrollbarHになる。
var element = document.getElementById('view');
var view = new iScroll(element, {
scrollbarClass: 'scrollbar'
});
iScroll at github: https://github.com/cubiq/iscroll
PHP Framework Pinoco - Variables
Pinoco Variables
ローカル変数の扱い
//ローカル変数の扱い
$localValues = $this->newVars();
//変数の設定
$localValues->foo = ‘var’;
$localValues[‘foo’] = ‘var’;
$localValues->set(‘foo’, ‘var’);
//変数の参照
$localValues->foo = ‘var’;
$localValues[‘foo’];
$localValues->get(‘foo’);
//アサインされている値のキーを所得する
$keys = $localValues->keys();
//キーを結合する
$localValues->keys()->join(‘,’);
ダイナミック変数の扱い
function dynamicFieldHandler($owner) {
$owner->index++;
return $owner->index . ” times called (dynamic)”;
}
$localValues = $this->newVars();
$localValues->index = 0;
//dynamicFieldという名前でハンドラを設定する
$localValues->registerAsDynamic(‘dynamicField’, ‘dynamicFieldHandler’);
//ダイナミック変数の参照
$value = $localValues->dynamicField . ‘\n’;
xxxx変数の扱い
function lazyFieldHandler($owner) {
$owner->index++; // will called once.
return $owner->index . ” times called (lazy)”;
}
$localValues = $this->newVars();
$localValues->index = 0;
//lazyFieldという名前でハンドラを設定する
$localValues->registerAsLazy(‘lazyField’, ‘lazyFieldHandler’);
//ダイナミック変数の参照
$value = $localValues->lazyField . ‘\n’;
リストの使用
$localList = $this->newList();
//リストに項目を追加する
$localList->push(“1st”);
//リストの先頭に項目を追加します。
$localList->unshift(“2nd”);
//リストの内容を結合する
$localList->concat(array(“3rd”, “4th”));
//リストの末尾から項目を取り出す
$localList->pop();
//リストの先頭から項目を取り出す。
$localList->shift();
//リストに関数をマッピングする
function decorate_with_bracket($e) {
return ‘[’ . $e . ‘]’;
}
$localList = $localList->map(‘decorate_with_bracket’);
Redcarのインストール
Textmateの代わりになるものを探していたら発見した。
Rubyが必要になるけど、よさげな感じ。
インストール
コマンドプロンプトからgemをインストールする。
gem install redcar
redcar install
起動
インストールが完了したら、redcarを起動する
redcar
Aptana3 Rubleの新しいディレクトリパス
バージョンをあげたら設定が変わっていたので調べました。
旧設定
-Daptana.ruble.user.location=C:/var/www/aptana/bundles
新設定
-Dstudio.rubleUserLocation=C:/var/www/aptana/bundles
My Standard Mootools Environment
jiggliemon:
Everyone’s got their own coding style. So I thought I would share mine:
var namespace = namespace || {};
(function(global){
var SomeObj = global.SomeObj = {
};
})(namespace);
Object.append({}, new Events, new Options);
PHPUnit3のインストール
PEARのアップグレード
pear channel-update pear.php.ne
pear upgrade pear
チャネルの追加
pear channel-discover pear.phpunit.de
pear channel-discover components.ez.no
pear channel-discover pear.symfony-project.com
古いバージョンをアンインストール
pear uninstall phpunit
pear uninstall phpunit2
PHPUnit3のインストール
pear install phpunit/PHPUnit
Ruby on Rails - uninitialized constant Rake::DSL
コマンド実行したらエラーが発生した。
uninitialized constant Rake::DSLって言われた。
rake db:migrate
- Gemfileにgem rake, ‘0.8.7’を追加
- bundle unlockでロックを解除
- bundle updateでアップデート
http://gendosu.jp/archives/990
Railsアプリケーションの作成
- アプリケーションを作成するディレクトリまで移動する。
- コマンドrails new [アプリケーション名]を実行してアプリケーションを作成する。
- 作成したアプリケーションディレクトリまで移動し、不足分のgemをコマンドbundle installでインストールする
- コマンドrails sでサーバーを起動する
1.