2月
27
2009
0

[近況報告]ちょっとしたイベントがあります(僕的に)
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

出張から帰って仕事してます。寝不足です。
ようやくEC-CUBEで作っていたサイトをリリースします。
それに伴いMySQLのバージョンを4から5に上げる必要があるのですが、既存のDB削除しないとアップデートできないというサーバ側の制約がございまして、今動いている別サイトのデータベースをバックアップしてアップデート後にデータを復旧しつつ、EC-CUBEで作ったサイトもリリースすると、しかも一人で、と。そういうことをしなければならなくなっちゃいまして。

いや、アップデート自体は簡単なんです。
恐らくセレクトボックスか何かでver5を選択してOKするだけ、みたいな。だって「さくらのレンタルサーバ」だし。僕linuxとか触ったことないし。コマンドとか意味わかんないし。スイーツ(笑)プログラマなんだもん。僕。みたいな。ゲロゲロ :-p 。

問題は、アップデートで退避させなきゃいけない別サイトが結構売れてるサイトなので、その売上を阻害しないようにしなきゃならないということなんですよね。当たり前ですね。

でも別サーバを用意してメンテ中そっちに切り替えて作業を行うとか、それ以前にサーバ分けろよとか、専用サーバ使えばいいじゃんとか、プロに任せろよそんなのとか、お前なんてやめちまえとか、色々あると思うんですが、うちにはそういう技術もないし使えるお金もないし、人もいないし、寝不足だしということもあって、やっぱり作業中はサイトを止めて作業をしなきゃならないんですよ。

曰く、じゃあおまえ夜中やれと。泊まればいいじゃんと。おとといからあんまり寝てないけど今日も寝ないで死後とすればいいジャンと。そういうことになったので、僕は今日寝ないで仕事することになりそうです。僕一人で。寒いです。眠いです。さびしいですと。そういうことになると思います。

恐らく朝まで会社のパソコンの前にいるような気がするので、かわいそうだなぁ?とか、そんなのよくあることだよねぇ?とか、がんばれよぉ?とか思うところのある方は→のチャットから励ましの一言お願いします。

追記:
愛娘よ、おとうさんは今日、うちには帰れません。(実質3日目)

Written by suzukenn in: 日記 | タグ:
2月
04
2009
0

[CakePHP]MultivalidatableBehaviorを入れてみた・・・が。
このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加このエントリをLivedoor Clipに追加このエントリをYahoo!ブックマークに追加このエントリをFC2ブックマークに追加このエントリをNifty Clipに追加このエントリをPOOKMARK. Airlinesに追加このエントリをBuzzurl(バザール)に追加このエントリをChoixに追加このエントリをnewsingに追加

概要

同じモデルに対して複数のバリデーションルールを設定する方法はないかと模索していたところ、Multivalidatableビヘイビアの存在を知り試してみました。

どのように使いたいかというと…
フォームからPOSTされた情報を

  1. まず「formCheck」バリデーションでチェックして、
  2. Trueなら、次にデータベースに保存するためPOSTされた情報を整形しもう一度「saveCheck」バリデーションでチェックする。
  3. Trueなら保存する。

という感じで使いたいと思ったのですが…それは後ほど。

導入方法

まずはビヘイビアを用意しましょう。

こちらのページの「Finally, this is the behavior:」と書かれた部分のソースをそのままコピペしてCakePHPの/app/models/behaviorsにmultivalidatable.phpという名前で保存します。

次はモデルの設定です。

Multivalidatableビヘイビアを使いたいモデルに

var $actsAs = array('Multivalidatable');

で、ビヘイビアをセットしてください。

次に該当モデルにMultivalidatableビヘイビア用の検証ルールを作成します。
$validationSetsというクラス変数を作って、そこにバリデーションセットごとの検証ルールを設定します。

var $validationSets = array(
    // ルール1
    'formCheck' => array(
        "name" => array(
            "required" => array(
                "rule" => VALID_NOT_EMPTY,
                "message" => "名前は必須です",
            );
        );
    ),
    // ルール2
    "saveCheck" => array(
        ......
    );
);

このように複数のルールを作ることができます。

それではコントローラ側で実際に使ってみましょう。

POSTされたデータをまずは”saveCheck”で検証し、通ればデータを整形して”saveCheck”で検証、通れば保存するという体で書いてみます。

// $this->dataにPOSTされたデータが格納されているとする。
// submitはisset($this->params['form']['submit'])でチェックする
if (isset($this->params['form']['submit'])) {
    // 検証ルール"formCheck"をセット
    $this->Model->setValidation('formCheck');
    $this->Model->set($this->data);
    if (!$this->Model->validates()) {
        // 検証失敗
        return;
    }
    // POSTされたデータを整形
    .........データを整形中.........
    $save = 整形したデータ;
    // 念のため$this->Modelを初期化
    $this->Model->create();
    // 検証ルール"saveCheck"をセット
    $this->Model->setValidation("saveCheck");
    $this->Model->set($save);
    if (!$this->Model->validates()) {
        // 検証失敗
        return;
    }
    // "saveCheck"の検証ルールを追加したので保存
    $this->Model->save($save);
}

と、まあこんな感じで書けばいいと思うのですが…ここで問題発生。

最初の”formCheck”はちゃんと検証されるのですが、次の”saveCheck”がどうしても検証してくれません。
おそらく何も検証されずにスルーしているようです。

pr($this->Model):

で中身を見比べてもちゃんと新たな検証ルールが$this->Model->validateに適用されているようですし、2回目の検証ルールを通常のModel::validateにセットして、$this->Model->restoreDefaultValidation()で通常の検証ルールに書き換えてもうまくいかない。。。

一応最初のバリデーションは通るのでそこまでは間違っていないと思うのですが、そこから先が何か違うのかなぁ?
もし何かお分かりの方がいらっしゃいましたら、コメントでも右メニューのチャットでも結構ですので教えていただけると助かります。

というわけでこのエントリー、未完成のまま保留とさせていただきますm_ _m*1

  1. 何かわかったら追記しますね []
Written by suzukenn in: 記事 | タグ: , ,

| I have been indebted to Aeros Theme. | Background image owner is NASA.