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;   
   }




}


templateの方では、

<form method="POST" action="<{$script}>">
<input type="hidden" name="action_confirm" value="dummy">

姓(*):<br><br>
<{form_input name="lastname"}><br>

名(*):<br><br>
<{form_input name="firstname"}><br>

フリガナ(姓)(*):<br><br>
<{form_input name="lastnamekana"}><br>

フリガナ(名)(*):<br><br>
<{form_input name="firstnamekana"}><br><br>

・
・
・
・
・
・
都道府県(*):<br>
<{form_input name="pref" emptyoption='--'}><br>
<br><br>
・
・
・
・
・
・
趣味(*):<br>
<{form_input name="hobby" separator='<br>'}><br>
<{form_input name="o_hobby"}><br>


<br>ご意見:<br>
<{form_input name="opinion"}><br>
<div align="center"><input type="submit" name="action_confirm" value="確認"></div>

これがtemplate画面。最初の

のhiddenタグの"action_confirm"は、このフォームをsubmitした際に、「confirm」というアクションを実行することを表す。
ちなみに都道府県のemptyoption='--'でsubmitされるとエラーが出るようになってる。(キー値が空なので。)