dolem0.10.0のリリース

Read More

先日に続いてdolemの新しいVerのリリース。


今回のリリースでついにVerが0.10.0となった。
今度のは前回のリリースからあまり間がなかった。

以下のリンクからdolemの最新版Ver.0.10.0がDLできる。
http://dolem.jp/?m=download


Ver.0.10.0での変更点はこちら↓
●ImageClassの実装。
●ValidatorClassのメンバにアップロードファイルのチェック関数を実装。
●configに画像キャッシュ用の定数を追加。
●controlのデフォルトインクルードにImageClassを追加



ではざっくり説明。


まずシステム全体としての大きな変更点はない
今回はImageClassというものを実装したにすぎない。

一応この新しいクラスファイルの読み込みをするためにcontrol.phpに一行増やしたが、ImageClassを使わないのであればそれも必要ない。
まあdolemとしてはImageClassはデフォルトで読み込みをする形をとっている。

あとconfig.phpにIMG_CACHE_DIR_PATHという新たな定数が増えた。
が、これは現時点では利用していない。

その定数が指し示すパスとして、repositoryフォルダの直下にimage_cacheという新たなフォルダが増えた。
image_cacheフォルダはcoreフォルダより内側にあるので、外部からの直アクセスが不可能な領域。
まあこれはおいおい利用する予定だが現時点のdolemとしては飾りに近い。



--
さてImageClassで利用できる機能として画像リサイズがある。
画像リサイズの書き方はいたって簡単。

■dolemのImageClassの例:画像リサイズ
<?php
function main() {
  $ImageClass = ImageClass::newInstance();
  $ImageClass->resize({元画像ファイルパス}, {新画像ファイルパス}, {横幅}, {縦幅});
  return true;
}// end function
?>


上記の解説。
まずいつものように$ImageClassオブジェクトを生成。
その後$ImageClass->resize()を実行するだけ。


$ImageClass->resize()の引数については以下に。


第1引数に元画像ファイルパスを指定する。
これはリサイズするための画像のローカルファイルパス(内部パス)となる。

第2引数に新画像ファイルパスを指定する。
これはリサイズが終わった新たなファイルとなる。
こちらもファイル名込みのローカルファイルパスを指定する必要がある。

第3引数は希望リサイズの横幅。
単位はpixel。

第4引数は希望リサイズの縦幅。



あと$ImageClass->resize()の戻り値として成功/失敗が返るようになっているので失敗ならばここで別の処理を書くこともできる。



--
さてImageClassは主にファイルアップロードの流れで使うことが多いと予想される。
しかし自分自身がアップしたファイルならともかく、ユーザがアップしてくるファイルであれば当然それなりのチェックが必要になる。

これに関連してValidatorClassにアップロードファイルに関する新たなチェック関数が増えた。
ValidatorClassは入力値チェックに特化したクラスだが、入力値の正否を判定するだけでなく画面出力用のエラー文字列も同時に生成するのが特徴。


■dolemのValidatorClassの例:アップロードファイルのチェック
<?php
function init() {
  $ErrorClss = ErrorClass::newInstance();
  $ErrorClass->clear();
  $ValidatorClass = ValidatorClass::newInstance();
  $ValidatorClass->clear();

  $chk=true;
  $ValidatorClass->setKeyName('file', 'アップロードファイル');
  if($chk) $chk = $_FILES['file']['tmp_name'];
  if($chk) $chk = $ValidatorClass->checkUPFileError($_FILES['file']['error']);
  if($chk) $chk = $ValidatorClass->checkUPFileExtension($_FILES['file']['name']);
  if($chk) $chk = $ValidatorClass->checkUPFileMime($_FILES['file']['tmp_name']);
  if($chk) $chk = $ValidatorClass->checkUPFileByte($_FILES['file']['tmp_name'], 500000);
  if($chk) $chk = $ValidatorClass->checkUPFileWidth($_FILES['file']['tmp_name'], 398);
  if($chk) $chk = $ValidatorClass->checkUPFileHeight($_FILES['file']['tmp_name'], 597);
  if($ValidatorClass->count()) {
    $ErrorClass->set($ValidatorClass->remove());
    redirect(HTTP_BASE_URL. '/?m=input&back=1&redirect=1');
  }// end if
  return true;
}// end function
?>
※入力値チェックはinit()に書く


最初にErrorClassとValidatorClassのオブジェクトを生成。
その直後、各クラス内に過去のデータが残っていてはいかんので一旦中身をクリアしている。

その後$ValidatorClass->setKeyName()としている。
この第1引数は<input type="file" name="file" />のようにname属性で指定した名前を入れている。
別にこれじゃなきゃダメってわけじゃないんだが特定しやすいように同じ名前の方がよい。

第2引数はエラー表示に利用される'主語'となる文字列。
上記では'アップロードファイル'と指定しているので入力エラーがあった場合、
アップロードファイル の容量が大きすぎます

のような形でエラー用の文字列が作成される。


それ以降は$chkが真なら実行される入力チェック。
つまり一つでも入力エラーがあればそこでfalseが入るのでそれ以降のプログラムはスキップされる。
なお個人的にはこの書き方はValidatorClassに限らずよく使う。


入力チェックが終わるとその後、$ValidatorClass->count()でエラーの個数を判定し、エラーがあれば$ValidatorClassの中身を丸々$ErrorClassに渡している。
$ErrorClassは画面をまたいでもその値が保持されている。
まあそれは$ValidatorClassも同じなのだが。

しかし$ErrorClassは画面出力機能も兼ね備えているのでリダイレクトされた先のページでエラー出力が簡単に実装できる。

■リダイレクト先のViewの例
view/input.php
<?php
$ErrorClass = ErrorClass::newInstance();
?>
■画像のアップロード
<form action="<?=HTTP_BASE_URL?>/?m=confirm" method="post" enctype="multipart/form-data">
  <?php $ErrorClass->flush('file')?>
  <input type="file" name="file" /><br />
  <input type="submit" name="btn_submit" value="submit" />
</form>


エラーがあればその内容をフラッシュする。
注意点はErrorClassをページの先頭でインスタンス化しておくことくらい。


エラーがあった場合のページのイメージ↓



ちなエラーがない場合のページのイメージ↓




なお上記の例はあくまで例。
上記のエラーの例を動作させるには、
model/input.php
model/confirm.php
view/input.php
の3つのファイルが最低限必要となる。

文字数の関係でここに書くことはできないがそのうちdolemの動作サンプルページにでも載せておくとしよう。




--
最後に。
今回ImageClassを実装するにあたって110さんのプログラムを大いに参考にさせてもらっている。
ImageClassを作るきっかけともなっている。

110さんにこの場を借りて礼を言いたい。

あざした。





Comments(1)

1  名無しさん  2013/03/29 (金) 00:10 ID:9TcW7gy15
About Us...