Ethnaの選択肢妥当性チェックプラグイン
Symfonyでchoiceっていうのがあるので、Ethnaでも同じように。
ActionFormのフォーム定義
ありがちなこんなの。Smartyのプラグインでレンダラー使ってる人はform_optionsを適当なものに差し替える。以降のでも同じ操作必要だけど。
<?php $form = array( 'config_status' => array( 'name' => '状態', 'type' => VAR_TYPE_INT, 'form_type' => FORM_TYPE_RADIO, 'required' => true, 'form_options' => array( '0' => '使わない', 1 => '使用する' ), ), );
ActionFormの_getPluginDefのオーバーライド
<?php /** * @brief form_typeのValidatorを作る * @param * @return */ function _getPluginDef($form_name) { $plugin_def = parent::_getPluginDef($form_name); $form_def = $this->getDef($form_name); if (isset($form_def['form_options'])){ $plugin_def['choice'] = array( 'choices' => $form_def['form_options'], 'error' => isset($form_def['form_options_error']) ? $form_def['form_options_error'] : '{form}に不正な値が入っています' ); } return $plugin_def; }
こんな感じ。
で、プラグイン
Tinycms_Plugin_Validator_Choice.php
<?php // {{{ Tinycms_Plugin_Validator_Choice /** * フォームの選択肢タイプチェックプラグイン * * @author * @access public * @package Ethna */ define('E_FORM_INVALID_CHOICE', 1001); class Tinycms_Plugin_Validator_Choice extends Ethna_Plugin_Validator { /** * フォームの選択肢チェックを行う * * @access public * @param string $name フォームの名前 * @param mixed $value フォームの値 * @param array $params プラグインのパラメータ */ function &validate($name, $value, $params) { if (in_array($value, array_keys($params['choices']))){ return true; } return Ethna::raiseNotice($params['error'], E_FORM_INVALID_CHOICE); } } // }}} ?>
これで不正な選択肢を投稿できないようになる。
プロジェクトPrefixは適当に変更してください。