2011-12-13 7 views
1

私は、表形式のhtml/JSインタフェースを使用する企業で働いています。これらは、各セルにクエリイベントが添付された自宅で栽培されています(実際の正直なところから神様まで)。古い使用法では適切でしたが、行とセルの間に必要な相互作用は、クライアント側ではますます複雑になっています。具体的には、サーバーとクライアントの両方の検証が必要です。ZendフォームとExt.grid.Panel

私が報告した開発者は、Zend_Formsに大変熱心であり、ExtJSのようなフレームワークを使用すると、エンドとフロントエンドのコードを2回書き戻したくないと主張しています。とにかくこれをやらなければならないだろう)。

したがって、私はZend_Form decoratorsを利用してExt.grid.Panel column defintionsを作成しようとしています。このためには、デコレータを使用して配列をエクスポートしてから、ViewHelperを使用してJSON文字列を直接レンダリングする必要があります。

だから、これはのようになります。

$dateElement = new Zend_Form_Element_Text('startDate', array(
    'label' => 'Start Date', 
    'validators' => array(
     new Zend_Validate_Date() 
    ) 
)); 

echo (string)$dateElement; 

だろう出力:(文字列のキャストと、多分->toArray()か何かと明らかにしない)

{ text: 'Start Date', dataIndex:'startDate', xtype:'datecolumn'} 

か:

array('text' => 'Start Date', 'dataIndex' => 'startDate', 'xtype' => 'datecolumn') 

私はこの段階に入ることができれば、私はそれから必要なものを得ることができたと思います。

ここで誰かがこれに似た何かをしようとしました(デコレータを使ってZend_FormsからHTMLではなくJSON/XML /その他のマークアップ出力を得る)か、

+0

何がしたいのプリントのようなものがフィールドとJSONまたはXMLとして彼の名前ではなくHTMLを持っていますか?私はExtJSを使用したことがないのでこれを尋ねますが、これがあなたが望むものなら、私は解決策の一部を持っていると思います...あなたがデコレータの出力として望むものの例を与えることができますか? –

+0

要素全体をJSONとして表現できるようにしたいのですが、レンダリングされたときと同じ方法で、HTMLでは「妥当性」を除いて検証されます。それはここの鍵です。私はバックエンドからjavascriptに渡して検証を渡したいので、便利なjsバリデーションを行い、セキュリティ上の理由からPHPでもう一度検証して、$ _REQUESTを衛生的なものとして信頼できません。 – Drew

答えて

1

私は

はこれに似デコレータください...私は解決策を持っていると思う:

$dateElement = new Zend_Form_Element_Text('startDate', array(
    'label' => 'Start Date', 
    'validators' => array(
     new Zend_Validate_Date() 
) 
$dateElement->setDecorators(array(
    new My_Form_JSON_Decorator("startDate","datecolumn"); 
)); 

:これに似たものを使用し、フォーム上に、その後

class My_Form_JSON_Decorator extends Zend_Form_Decorator_Abstract{ 

    protected $xtype; 
    protected $dataIndex; 

    public function __construct($dataIndex,$xtype){ 
     $this->xtype=$xtype; 
     $this->dataIndex=$dataIndex; 
    } 

    public function render($content){ 
     $element=$this->getElement(); 
     $label=$element->getLabel 
     //if you need errors here too do the same with $element->getMessages(); 
     return 'array ("text"=>"'.$label.'","dataIndex"=>"'.$this->dataIndex.'","datecolumn"=>"'.$this->xtype.'")'; 
    } 
} 

を最後にビューでは、次のように設定します。

{ 
    Date: <?php echo $this->form->startDate; ?>, 
} 

私は上記のコードを試していませんでしたが、フォームのデコレータを変更する必要があるときに私が一度使った同様のコードで行いました。

それはすべて正しいとは言えませんでしたが、私はそれがあなたにそれを行う方法を示していると思います。

良い仕事=)

+0

うわー...私はこれに1つ以上の投票があったといい。 – Drew

+0

コードは正常に機能しましたか?またはエラーがありますか?エラーがある場合は、修正して回答を編集するように教えてください=) –

関連する問題