ホーム > 日記 > アクションフォームのフォーム値をyamlで書きたい!

アクションフォームのフォーム値をyamlで書きたい!

アクションフォームのフォーム値をyamlで書きたいとは配列好きなので思ったことなかったのですが、PHP勉強会でEthnaの話題がでるということで半年振りくらいに触ってみる。
半年振りでも変わらないEthnaステキ!

yamlファイルはアクションと同ディレクトリに小文字ファイル名で。

これが元。


class Sample_Form_Login extends Sample_ActionForm
{
    /** @var    bool    バリデータにプラグインを使うフラグ */
    var $use_validator_plugin = true;

    /**
     *  @access private
     *  @var    array   フォーム値定義
     */
    var $form = array(
        'login_id' => array(
            'type'          => VAR_TYPE_STRING,
            'form_type'     => FORM_TYPE_TEXT,
            'name'          => 'ログインID',
            'required'      => true,
        ),
        'password' => array(
            'type'          => VAR_TYPE_STRING,
            'form_type'     => FORM_TYPE_PASSWORD,
            'name'          => 'パスワード',
            'required'      => true,
        ),
        'login' => array(
        ),
    ); 

1.lib以下にspycの3.0betaぶち込む
2.コントローラでrequire


/** アプリケーションライブラリのインクルード */
require_once 'Ethna/Ethna.php';
require_once 'Sample_Error.php';
require_once 'Sample_ActionClass.php';
require_once 'Sample_ActionForm.php';
require_once 'Sample_ViewClass.php';

require_once 'spyc/spyc.php';
//require_once 'spyc/spyc.php5'; 

3.アクションと同位置にファイル名.yaml(今回はlogin.yaml)を作成


login_id:
  type: VAR_TYPE_STRING
  form_type: FORM_TYPE_TEXT
  name: ログインID
  required: true
password:
  type: VAR_TYPE_STRING
  form_type: FORM_TYPE_PASSWORD
  name: パスワード
  required: true
login:

4.アクションフォームのコンストラクタをオーバーライド


    function Sample_Form_Login(&$controller)
    {
        parent::Sample_ActionForm($controller);

        $yaml_path = dirname(__FILE__).DIRECTORY_SEPARATOR.strtolower(substr(basename(__FILE__), 0, -3)).'yaml';

        // キャッシュマネージャ
        $plugin =& $this->backend->getPlugin();
        $cache_manager =& $plugin->getPlugin('Cachemanager', 'Localfile');
        // キャッシュKeyの設定
        $cache_key = md5($yaml_path);
        // このKeyに対する有効なキャッシュの確認
        if ($cache_manager->isCached($cache_key)) { // キャッシュがヒット
            $this->form = $cache_manager->get($cache_key);
        } else { // 有効なキャッシュが見つからなかった
            $this->form = Spyc::YAMLLoad($yaml_path);
            // 省略値補正
            $constants = get_defined_constants();
            foreach ($this->form as $name => $value) {
                foreach ($this->def as $k) {
                    if (isset($value[$k]) == false) {
                        $this->form[$name][$k] = null;
                    }
                    // type, form_typeの補正
                    if (isset($value[$k]) && in_array($k, array('type', 'form_type'))
                            && array_key_exists($value[$k], $constants)) {
                        $this->form[$name][$k] = $constants[$value[$k]];
                    }
                }
            }
            // データをキャッシュする
            $cache_manager->set($cache_key, $this->form);
        }
    } 

カテゴリー: 日記 タグ:
  1. 2017 年 1 月 3 日 06:18 | #1

    By January 28, 2013 – 11:41 pm8y1&#o2u7;re in point of fact a good webmaster. The web site loading pace is incredible. It sort of feels that you’re doing any unique trick. Moreover, The contents are masterpiece. you’ve done a excellent task in this topic!

  1. トラックバックはまだありません。