kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

TOOL更新_お助けTOOLをzendframeworkに移植する方法を調査する。

1.お助けTOOLをzendframeworkに移植する方法を調査する。ToDoリストの(http://d.hatena.ne.jp/kazpgm/20090403/1238773943)暫定99.の調査
  今後わかったことはここに書く。
基本的にhttp://framework.zend.com/manual/ja/index.htmlプログラマ向けリファレンスガイド」から抜粋


・認証 
  zend:

Zend_Auth_Adapter_DbTableでチェックする。
(ログイン用テーブルを読んでチェックOK、NGを判定する)
phpロジック、htmlは自動作成。

  お助けTOOL:

自分でログイン用テーブルを読んでチェックOK、NGを判定している。
phpロジック、htmlは自動作成。

・DB
  zend:

Zend_Dbを使用する。

   ・DBコネクト

$db = Zend_Db::factory('Pdo_Mysql', $parameters);
$db->getConnection();
$db->setFetchMode(Zend_Db::FETCH_OBJ);

   ・複数件read

$result = $db->fetchAll($sql);

   ・1件read

$result = $db->fetchOne($sql);

   ・追加

$data = array(
  'xxxxx'      => 'yyyyy',
);
$db->insert('TABLE', $data);

   ・更新

$data = array(
  'xxxxx'      => 'yyyyy',
);
$n = $db->update('TABLE', $data, 'KEY = xxxxx');

   ・削除

$n = $db->delete('TABLE', 'KEY = xxxxx');

    
  お助けTOOL:

PEAR DB(DB.php)を使用している。

   ・DBコネクト

$db =& dbCheck(DB::connect(DSN));
$db->setFetchMode(DB_FETCHMODE_ASSOC);

   ・複数件read

$result = $db->getAll($sql);

   ・1件read

$o = dbCheck($db->getRow($sql));

   ・追加

$columns = array(
  'xxxxx'      => 'yyyyy',
);
dbInsert($db, 'TABLE', $columns);

   ・更新

$data = array(
 'xxxxx'      => 'yyyyy',
);
dbUpdate($db, 'TABLE', $columns, array('KEY = '. $db->quoteSmart( 'xxxxx')));

   ・削除

dbDelete($db, 'TABLE', array('KEY = '. $db->quoteSmart( 'xxxxx') ));

・セッションデータ、リクエストデータ処理
  zend:

Zend_Session::start();
$yyyy = new Zend_Session_Namespace('xxxxx');
$yyyy->zzz = 値;
unset($yyyy->zzz);
Zend_Session::writeClose(); 

$xxxx = $this->_getParam('xxxx', 'default'); 
$this->_setParam('xxxx','値');

$view = new Zend_View(); <=VIEW
$view->xxxx = '値'; 

  お助けTOOL:

session_start();
$_SESSION['zzz']のまま使っている。
unset($_SESSION['zzz']);

$_REQUEST['xxxx']のまま使っている。

・入力チェック
  zend:

コントローラクラス中のアクションメソッドに入力チェックをおく。
例)
 public function confirmAction() 
   $validate = array(
     'id' => array(
       'Alnum'
       array('StringLength', 5, 10),
       'presence' => 'required',
       'message' => array(
         0 => ... // Alnumに対するエラーメッセージ
         1 => ... // StringLengthに対するエラーメッセージ
       )
     ),
     ・・・
   );
   $data = $_POST;
   $filter = new Zend_Filter_Input(null, $validate, $data);
   if(!$filter->isValid()) {
     // エラー処理
  }

  お助けTOOL:

「AppCheckUtil」クラス(http://d.hatena.ne.jp/kazpgm/20090520/1242839505)使用

・メール
  zend:

Zend_Mailを使用する。
$mail = new Zend_Mail('ISO-2022-JP');

  お助けTOOL:

mb_send_mail使用して自作している。
<=PearのMailクラスを使ったこともある。こっちのほうが似ているかも。
$mailObject = Mail::factory("smtp", $params);

・VIEW(HTML)
  zend:

指定なし。お助けTOOLと同じとする。(Zend_Viewあるけど「お助けTOOL」のほうがいいと思う。)

  お助けTOOL:

htmlを<?php ?>を使用して作成。

・Control
  zend:

URL/xxxx/yyyy.phpでxxxxコントローラ、yyyyアクションという命名規則あり。
<=すべてのリクエストをいったんフロントコントローラ
(ドキュメントフォルダにあるindex.php)で受け取った上で
その URL にもとづいたアクションコントローラに配送する。というもの。
たとえばURL/admin/company.phpだとしたら、
コントローラクラスはコントローラディレクトリに
ファイル名は「AdminController.php」、クラス名は「AdminController」で作成。
さらに、コントローラクラスにはそのコントローラがサポートする
アクションをメソッド名「companyAction」として定義する。

※デフォルトでは「http://hostname/[コントローラ名]/[アクション名]/」の場合
[アクション名]Actionが呼び出される。

  お助けTOOL:

URL/XXXX/YYYY.phpはxxxxフォルダYYYY.php

・エラーハンドリング
  zend:

エラーが発生した場合になぜエラーになったか分かる。
<?php echo $this->exception->getMessage() ?>
<pre><?php echo $this->exception->getTraceAsString() ?></pre>
<pre><?php var_dump($this->request->getParams()) ?></pre>

  お助けTOOL:

DBエラーのみログ出力するようにしてある。その他のエラーはphp.iniのとおり。

・ファイルへのアクセス
  zend:

未調査

  お助けTOOL:

$_FILES['sample_file']を使用。

・配列へのアクセス
  zend:

未調査

  お助けTOOL:

・例)
 <input type="checkbox" name="sample_array[] "  value="1" id="check_ssample_array[]1"  />
 <label for="check_sample_array[]1">Super管理者</label>
 <input type="checkbox" name="sample_array[]"  value="2" id="check_sample_array[]2"  />
 <label for="check_sample_array[]2">管理者</label>

 if (!empty($_REQUEST['sample_array']) && is_array($_REQUEST['sample_array'])) {
   $tempArray = dbQuotes($db, $_REQUEST['sample_array']);
   AppSrchUtil::setSqlStrSub1($conditions);
   $conditions .= " it.item13 in (". join(', ', $tempArray) . ')'; // 完全一致
 }

・2重POSTのチェック
  zend:

未調査

  お助けTOOL:

現在2重POSTのチェックなし
  • 2009/05/18 22:00 - 02:00
  • 2009/05/20 01:00 - 02:00
  • 2009/05/27 22:00 - 22:30 03:00 - 04:30

■サイト:http://kazpgm.ddo.jp/