私の回答が助けになるかどうかはわかりませんが、ここには行きます。 フォーム自体を編集することなくZFデコレータを独自のデコレータに置き換える方法があります。
溶液#1:
方法はhereを記載しました。またはショートで:
のは、フォーム持っているとしましょう:
class Form extends Zend_Form
{
function init()
{
$this->addElement ('text', 'a', array (
'label' => 'Name'
));
}
}
その後のapplication.ini
に持って
resources.view.helperPath.Default_View_Helper = APPLICATION_PATH "/views/helpers"
新しいファイルアプリケーションを追加/ビュー/ヘルパー/ FormText.phpを
class Default_View_Helper_FormText extends Zend_Form_Decorator_Abstract
{
function formText()
{
return 'It is I.';
}
}
これだけです。
溶液#2:
のは、この抽象クラスを持ってみましょう:その後、
abstract class Application_Style
{
private $_object;
function __construct ($object = null)
{
if (isset ($object))
{
$this->apply ($object);
}
}
function apply ($object)
{
$this->setObject ($object);
if ($this->filter())
{
$this->onApply();
}
return $object;
}
function __call ($method, $arguments)
{
return call_user_func_array (array ($this->getObject(), $method), $arguments);
}
abstract protected function onApply();
protected function filter()
{
return true;
}
function setObject ($_object)
{
$this->_object = $_object;
}
function getObject()
{
return $this->_object;
}
}
そして子孫。
class Application_Style_AdminForm extends Application_Style
{
function onApply()
{
$this->addElement ($submit = new Zend_Form_Element_Submit ('submit', array(
'label' => 'Submit',
)));
$submit
->removeDecorator ('DtDdWrapper')
->addDecorator ('HtmlTag', array (
'placement' => Zend_Form_Decorator_HtmlTag::PREPEND,
'tag' => 'p',
'openOnly' => 1,
))
->addDecorator ('Custom', array ('text' => ' '))
;
}
}
onApply()メソッドには、あなたに合ったものを使用できます。デコレータの追加や削除など。そして、あなたはこのようなあなたの形にこのスタイルを呼び出すことができます。
new Application_Style_AdminForm ($this);
フォーム表現を操作することができますが、それを直接変更せずにいます。
これは良い解決策のようです。したがって、formText()メソッドは文字列型を返します。その文字列はフォーム上の各テキストフィールドを置き換えます。そして、 ''または同様の文字列を返す必要があります。私は型Zend_Form_Element_Textを返すことはできません.. – tasmaniski
はい、まさに正しいです。文字列。 – akond
これは良い習慣ですが、私の問題では役に立ちません。回答+1に感謝しますが、この回答を受け入れることはできません。 – tasmaniski