挨拶フェローコーダー。Zend_Form_Element_Radioを無効にする方法はありますが、依然としてその値はPOSTリクエストに含まれていますか?
私のアプリケーションでは、Zend_FormsにいくつかのZend_Form_Elementsがあります。ユーザーの役割に基づいて、これらの要素の一部を読み取り専用/無効の状態に変更したいと考えています。しかし、フォームを提出することは依然として重要です。 POSTは各要素の値を送信する必要があります。 したがって、readonly属性の設定は正常に動作しますが、無効にはなりません。 HTMLフォーム要素を無効にすると、その値はPOST要求に渡されません。
問題は、すべてのタイプのフォーム要素でreadonly属性を設定できないことです。ラジオボタンには影響しません。
/**
*
* changes the Zend_Form_Element to a 'readonly' like state
*
* @param String $name (zend-) name of the element
*/
public function readonlyElement($name){
$elem = $this->getForm()->getElement($name);
/* @var $elem Zend_Form_Element */
$attribs = $elem->getAttribs();
if(is_a($elem, 'Zend_Form_Element_Radio')){
// !! this does NOT work !!
$attribs['disabled'] = true;
$value = $elem->getValue();
$hidden = new Zend_Form_Element_Hidden($name);
$hidden->setValue($value);
$this->getForm()->addElement($hidden);
}
else {
$attribs['readonly'] = true;
}
$style = $attribs['style'];
$attribs['style'] = $style;
$elem->setAttribs($attribs);
}
ラジオボタンを無効にして、同じ値と同じ名前の非表示フィールドを追加しようとしました。 Zend_Form_Elementの名前は一意でなければならないので、これはうまくいきませんでした。私も$ elem-> setName()で遊んで、既存の要素の名前を別のものに変更しました。これまでのところ、私は成功していませんでした。私の問題を解決する方法はありますか?
おかげで、明確にするために
アンドレアス
: これは私がコントローラに自分のフォームを使用する方法である:
$form = new Some_Form();
//attach filters, validators, remove unneeded elements based on active user
$this->modifyForm($form);
if ($this->getRequest->save){
if $form->isValid(($this->getRequest->params){
//... Check and save
}
}
else{
$form->populate($model->toArray());
}
「無効」のフィールドが最初に投入されますが、フォーム検証の場合POSTデータが送信されなかったために空になります。無効なフィールドと同じ名前の隠しフィールドを追加すると、純粋なPHP/HTMLでこの問題が解決されます。
私はあなたに同意しませんフォームフィールドにバリデーターとフィルターを設定し、$ form-> getValidValues()を使用して安全な投稿データを取得します。 –
あなたの答えをありがとう。私は最終的な検証のために私のフォーム値に頼っていません。しかし私は私のコントローラで$ form-> isValid($ this-> getRequest-> getPost())を使ってフォームを検証します。エラーの場合、エラーが表示され、古い「POSTed」値がすべて表示されます。 (フォームを再生成する必要はありません)したがって、ラジオボタンの値が送信されない場合、それらは単にチェックが外されます。 – ACNB
@Kees Schepers私は、値が変更されないようにするために、フォームのreadonly属性に依存しないとSamが言っていたと思います。 – ACNB