Memolog

4月 2, 2012 at 11:15pm
リアクション(0)

久しぶりに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);
    }
}

4月 1, 2012 at 10:33pm
リアクション(0)

久しぶりにCakePHPを使用してみる - 設定から

CakePHPの最新バージョンをダウンロードしてくる。
今だと、2.1.1が最新のようだ。

CakePHPの動作確認

アーカイブを解凍して、プロジェクトのディレクトリに配置する。
次のApacheの設定を行う、設定ファイルを開いて、バーチャルホストの設定を追記する。
バーチャルホストの設定を普段はMAMPでやっているのテキストファイルで、ちまちまやるのがめんどくさい。 MAMPの有償版購入しててよかった。

Apacheの設定が完了し、CakePHPが動作するのか試したいので、ブラウザからアクセスする。
普通にアクセスできた。

Security.saltとSecurity.cipherSeedの変更

普通にアクセスして、ページが見れているけど、Security.saltSecurity.cipherSeedでエラー出るし、データベースに接続できないと表示されているので、設定を変更する。

まず、Security.saltSecurity.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とかはどうするんだろう。

とりあえず、設定は完了したので、再度アクセスする。
データベースのメッセージも消えたので、大丈夫ぽい。
これで設定は完了した。

次は、アプリ作成に入る、なんにも決めていなけどとりあえずブログでいいや。

11月 6, 2011 at 8:11am
15リアクション

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’);

10月 1, 2011 at 8:56am
18リアクション

Redcarのインストール

Textmateの代わりになるものを探していたら発見した。
Rubyが必要になるけど、よさげな感じ。

インストール

コマンドプロンプトからgemをインストールする。

gem install redcar
redcar install

起動

インストールが完了したら、redcarを起動する

redcar

9月 25, 2011 at 1:19pm
リアクション(0)

Aptana3 Rubleの新しいディレクトリパス

バージョンをあげたら設定が変わっていたので調べました。

旧設定 -Daptana.ruble.user.location=C:/var/www/aptana/bundles

新設定 -Dstudio.rubleUserLocation=C:/var/www/aptana/bundles

9月 17, 2011 at 9:05pm
11リアクション
jiggliemonからリブログ

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);

7月 27, 2011 at 9:37am
5リアクション

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

7月 24, 2011 at 11:39pm
9リアクション

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でサーバーを起動する