/** * プラグインを使ったフォーム値検証メソッド * * @access private * @param string $form_name フォームの名前 * @todo ae 側に $key を与えられるようにする */ public function _validateWithPlugin($form_name) { // (pre) filter if ($this->form[$form_name]['type'] != VAR_TYPE_FILE) { // 入力値とフィルタ定義を取り出す $form_var = $this->get($form_name); $filter = isset($this->form[$form_name]['filter']) ? $this->form[$form_name]['filter'] : null; // フィルタを適用 if (is_array($this->form[$form_name]['type']) == false) { $this->set($form_name, $this->_filter($form_var, $filter)); } else { if ($form_var != null) { // 配列の場合 foreach (array_keys($form_var) as $key) { $this->set($form_name . "[" . $key . "]", $this->_filter($form_var[$key], $filter)); } } else { // 配列で値が空の場合 $this->set($form_name, $this->_filter($form_var, $filter)); } } } $form_vars = $this->get($form_name); $plugin = $this->_getPluginDef($form_name); // type のチェックを処理の最初に追加 $plugin = array_merge(array('type' => array()), $plugin); if (is_array($this->form[$form_name]['type'])) { $plugin['type']['type'] = $this->form[$form_name]['type'][0]; } else { $plugin['type']['type'] = $this->form[$form_name]['type']; } if (isset($this->form[$form_name]['type_error'])) { $plugin['type']['error'] = $this->form[$form_name]['type_error']; } // スカラーの場合 if (is_array($this->form[$form_name]['type']) == false) { foreach (array_keys($plugin) as $name) { // break: 明示されていなければ,エラーが起きたらvalidateを継続しない $break = isset($plugin[$name]['break']) == false || $plugin[$name]['break']; // プラグイン取得 unset($v); $v = $this->plugin->getPlugin('Validator', ucfirst(strtolower($name))); if (Ethna::isError($v)) { continue; } // バリデーション実行 unset($r); $r = $v->validate($form_name, $form_vars, $plugin[$name]); // エラー処理 if ($r !== true) { if (Ethna::isError($r)) { $this->ae->addObject($form_name, $r); } if ($break) { break; } } } return; } // 配列の場合 // break 指示用の key list $valid_keys = is_array($form_vars) ? array_keys($form_vars) : array(); foreach (array_keys($plugin) as $name) { // break: 明示されていなければ,エラーが起きたらvalidateを継続しない $break = isset($plugin[$name]['break']) == false || $plugin[$name]['break']; // プラグイン取得 unset($v); $v = $this->plugin->getPlugin('Validator', ucfirst(strtolower($name))); if (Ethna::isError($v)) { continue; } // 配列全体を受け取るプラグインの場合 if (isset($v->accept_array) && $v->accept_array == true) { // バリデーション実行 unset($r); $r = $v->validate($form_name, $form_vars, $plugin[$name]); // エラー処理 if (Ethna::isError($r)) { $this->ae->addObject($form_name, $r); if ($break) { break; } } continue; } // 配列の各要素に対して実行 foreach ($valid_keys as $key) { // バリデーション実行 unset($r); $r = $v->validate($form_name, $form_vars[$key], $plugin[$name]); // エラー処理 if (Ethna::isError($r)) { $this->ae->addObject($form_name, $r); if ($break) { unset($valid_keys[$key]); } } } } }
/** * Ethna 本体付属のプラグインのソースを include する * (B.C.) Ethna 2.5.0 perview 5 以降,このメソッドには意味がありません.Ethna_Plugin::import を使ってください * * @access public * @param string $type プラグインの種類 * @param string $name プラグインの名前 * @static */ public static function includeEthnaPlugin($type, $name) { Ethna_Plugin::import($type, $name); }
/** * Ethna 本体付属のプラグインのソースを include する * * @access public * @param string $type プラグインの種類 * @param string $name プラグインの名前 * @static */ function includeEthnaPlugin($type, $name) { Ethna_Plugin::includePlugin($type, $name, 'Ethna'); }
/** * フィルタチェインを生成する * * @access protected */ public function _createFilterChain() { $this->filter_chain = array(); foreach ($this->filter as $filter) { $filter_plugin = $this->plugin->getPlugin('Filter', $filter); if (Ethna::isError($filter_plugin)) { continue; } $this->filter_chain[] = $filter_plugin; } }