symfony日記21
getRequest()->getParameterHolder()とfromArray()を使って、
postされたパラメーターをDBに登録する
というのはこんな感じにできてしまうが・・・
(action.actionClass.php) $data = array(); $data['name'] = $this->getRequestParameter('name'); $data['title'] = $this->getRequestParameter('title'); $data['age'] = $this->getRequestParameter('age'); HogePeer::addData($data); (HogePeer.php) public static function addHoge($data) { $hoge = new Hoge(); $hoge->setName($data['name']); $hoge->setName($data['title']); $hoge->setName($data['age']); $hoge->save(); }
これではパラメータが大量にあったときにコードが長くなる傾向がある。
そこでパラメータをまとめて配列として扱うことでコードを短くします
(action.actionClass.php) $data = $this->getRequest()->getParameterHolder(); //この中にpostされたパラメータの配列が入ってる HogePeer::addData($data); (HogePeer.php) public static function addHoge($data) { $hoge = new Hoge(); $hoge->fromArray($data->getAll(), BasePeer::TYPE_FIELDNAME); //パラメータの配列を渡す $hoge->save(); }
こんなに短くなりました!
ちなみにfromArrayではまったのですが、第二引数が指定されてなかったためでした。
om/BaseHoge.phpのfromArrayメソッドを見るとこのように記載されており、
public function fromArray($arr, $keyType = BasePeer::TYPE_PHPNAME)
$hogeをvar_dumpして引数有りとなしを比べたら意味がわかりました。
まず$data->getAll()の中の配列は
Array ( [name] => koyukin [title] => huga [age] => 25 )
これに対して
引数なし(TYPE_PHPNAME)でfromArrayすると
Array ( [1] => Name [2] => Title [3] => Age )
引数あり(TYPE_FIELDNAME)でfromArrayすると
Array ( [1] => name [2] => title [3] => age
なーんだ、大文字か小文字かだけの違いだったんですね。
なのでこの場合はTYPE_FIELDNAMEが正解でした。