/** * FilterChainの最後にFilterを追加 * * @param string $name Filterのクラス名 * @param string $alias Filterのエイリアス名 * @param array $attributes Filterの属性値 */ public function add($name, $alias = '', $attributes = NULL) { // エイリアス名が指定されていない場合はクラス名をセット if (empty($alias)) { $alias = $name; } // Filterの実行が既に始まっていたらエラー(実行後の追加はエラー) if ($this->_index > -1) { throw new Teeple_Exception("既にフィルターが実行されています。"); } // Filterのクラス名が不正だったらエラー if (!preg_match("/^[0-9a-zA-Z_]+\$/", $name)) { throw new Teeple_Exception("フィルターのクラス名が不正です。({$name})"); } // 既に同名のFilterが追加されていたら何もしない if (isset($this->_list[$alias]) && is_object($this->_list[$alias])) { $this->log->info("このFilterは既に登録されています({$name}[alias:{$alias}])"); return; } // オブジェクトの生成に失敗していたらエラー $className = "Teeple_Filter_" . ucfirst($name); $filter = $this->container->getComponent($className); if (!is_object($filter)) { throw new Teeple_Exception("Filterオブジェクトの生成に失敗しました。({$name})"); } if (is_array($attributes)) { $filter->setAttributes($attributes); } $this->_list[$alias] = $filter; $this->_position[] = $alias; return; }
/** * ConverterのListを生成 * * @param array $params Convertする条件が入った配列 * @access private * @since 3.0.0 */ private function _buildConverterList($params) { foreach ($params as $key => $value) { $key = preg_replace("/\\s+/", "", $key); $value = preg_replace("/\\s+/", "", $value); if ($key == "") { throw new Teeple_Exception("Converterの設定が不正です。"); } // // $key は attribute.name のパターン // $keyArray = explode(".", $key); if (count($keyArray) != 2) { throw new Teeple_Exception("Converterのキーが不正です。"); } $attribute = $keyArray[0]; // 属性の名前 $name = $keyArray[1]; // Converterの名前 $className = "Converter_" . ucfirst($name); // // 既に同名のConverterが追加されていたら何もしない // if (isset($this->_list[$name]) && is_object($this->_list[$name])) { continue; } // // オブジェクトの生成に失敗していたらエラー // $converter = $this->container->getComponent($className); if (!is_object($converter)) { throw new Teeple_Exception("Converter {$className} の生成に失敗しました。"); } $this->_list[$name] = $converter; } }