Jul23:社内用フレームワーク構築(TOP→フォーム)
まず、TOP画面を表示させる。action,view,テンプレートを作って、
htdocs/index.phpは
<?php require_once(dirname(__FILE__).'/../app/Elixir_Controller.php'); Elixir_Controller::main('Elixir_Controller','index'); ?>
index.tplのformへの遷移は、
<a href="?action_form=1"><font size="2">さっそく応募する</font></a>
とする。どのアクションを呼び出すかはここで決まる。
んで、app/action/Form.phpでのreturn先は、
function perform() { return 'form'; } }
となっている。続いて都道府県をDBから取得するための設定を行う。まずDBへの接続だが、BASE/etc/conf/elixir-ini_devlocal.phpで
$config['dsn'] = 'mysql://user:passwd@localhost/table_name';
としてDBへの接続を行う。
DBへの接続ができたら、add-managerコマンドでPHPファイルを作り、
class Elixir_PrefManager extends Ethna_AppManager { public function getPref(){ $pref_array = $this->db->db->getAssoc("select prefid,pref from pref_info order by prefid asc"); return $pref_array; } }
んで、actionclassのForm.phpで、
class Elixir_Action_Form extends Elixir_ActionClass { function perform() { $pref_manager = $this->getManager('pref'); $pref_array = $pref_manager->getPref(); $this->af->setApp('pref_array', $pref_array); return 'form'; } }
これでtemplateで{$app.pref_array}とすれば都道府県の配列を呼び出せるようになった。
→7月29日追記
結局アクションクラスに入れてもアクションフォームにまた都道府県の配列を渡さなければいけないので、都道府県配列をDBからとってくるのは、アクションフォームの最後の方で行った。
'pref' =>array( ・ ・ ・ 'option' => 'getPreflist', ・ ・ ), ・ ・ ・ function getPreflist() { $pref_manager = $this->getManager('pref'); $pref_array = $pref_manager->getPref(); return $pref_array; } }
てな感じ。
一方、フォームを作成するが、これはアクションクラスで
class Elixir_Form_Form extends Elixir_ActionForm { /** * @access private * @var array form definition. */ var $form = array( 'lastname' => array( 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_TEXT, 'name' => 'lastname', // // Validator (executes Validator by written order.) 'required' => true, 'min' => 1, 'max' => 50, 'regexp' => null, 'mbregexp' => null, 'mbregexp_encoding' => 'UTF-8', // // Filter 'filter' => 'mbtrim', ・ ・ ・ ・ ・ 'sex' => array( 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_RADIO, 'name' => 'sex', 'option' => array('m'=>'男','f'=>'女'), // // Validator (executes Validator by written order.) 'required' => true, // 'min' => 1, // 'max' => 50, 'regexp' => null, 'mbregexp' => null, 'mbregexp_encoding' => 'UTF-8', // // Filter 'filter' => 'mbtrim', ), ・ ・ ・ ・ ・ 'pref' => array( 'type' => VAR_TYPE_STRING, 'form_type' => FORM_TYPE_SELECT, 'name' => 'pref', 'required' => true, 'required_error' => '都道府県を選択してください。', 'min' => 1, 'max' => 4, 'option' => 'getPreflist', 'regexp' => null, 'mbregexp' => null, 'mbregexp_encoding' => 'UTF-8', 'filter' => 'mbtrim', ), ・ ・ ・ ・ ); function getPreflist() { $pref_manager = $this->getManager('pref'); $pref_array = $pref_manager->getPref(); return $pref_array; } }