Zend Forms和Ext.grid.Panel

时间:2011-12-13 23:31:43

标签: json extjs extjs4 zend-form zend-framework

我在一家使用制表html / JS界面的公司工作。这些都是本土的(真正对上帝而言是诚实的),每个单元都附有查询事件。对于旧的用法,它们是合适的,但行和单元之间所需的交互在客户端变得更加复杂。具体来说,他们需要服务器和客户端验证。

为了促进这一点,我报告的开发人员非常热衷于Zend_Forms,并且坚持使用像ExtJS这样的框架,他们不希望两次写回端和前端代码(请忽略它,如果它是所有家庭成长他们都必须这样做。)

因此,考虑到这一点,我正在尝试利用Zend_Form decorators创建Ext.grid.Panel column defintions。为此,我需要使用装饰器导出一个数组(然后使用ViewHelper json),或者直接渲染一个JSON字符串。

所以这就像是:

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

echo (string)$dateElement;

会输出:

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

或(显然不是使用字符串强制转换,但可能使用->toArray()或其他内容):

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

我想如果我能够进入这个阶段,我可以得到我需要的东西。

这里有没有人尝试做类似的事情(获取JSON / XML /其他标记输出,而不是使用装饰器从Zend_Forms获取HTML)或者是否可以指向任何资源?

1 个答案:

答案 0 :(得分:1)

我想我有一个解决方案......

制作一个与此类似的装饰:

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.'")';
    }
}

然后,在表单上,​​使用类似的内容:

$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");
));

最后,在View上,你应该有这个:

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

我没有尝试过上面的代码但是,当我需要更改Form的装饰器时,我使用了类似的代码。

这可能不完全正确,但我认为它向您展示了这样做的方法。

干得好=)