Zend framework 使用条令2在zend框架中保存复杂表单数据

Zend framework 使用条令2在zend框架中保存复杂表单数据,zend-framework,symfony1,doctrine,doctrine-orm,Zend Framework,Symfony1,Doctrine,Doctrine Orm,第2条原则与采埃孚的整合似乎使简单的事情变得非常困难,对我来说时间消耗最少 我不能只给条令一个提交的表单数组来自动将键/值对映射到条令实体,如果我有一个多对多实体,并且提交的表单有嵌套的数组,这会变得非常复杂 在symfony中,提交的表单键/值可以轻松自动映射并保存到表中。我不知道如何在ZF中做到这一点,特别是如果我有多对多和/或多对一条令实体,并且我有**嵌套表单元素,需要多级迭代 我不想显式设置每个实体并手动创建每个实体对象**。 如果我使用ZF的原生数据库体系结构,痛苦会少很多 我已经做

第2条原则与采埃孚的整合似乎使简单的事情变得非常困难,对我来说时间消耗最少

我不能只给条令一个提交的表单数组来自动将键/值对映射到条令实体,如果我有一个多对多实体,并且提交的表单有嵌套的数组,这会变得非常复杂

在symfony中,提交的表单键/值可以轻松自动映射并保存到表中。我不知道如何在ZF中做到这一点,特别是如果我有多对多和/或多对一条令实体,并且我有**嵌套表单元素,需要多级迭代

我不想显式设置每个实体并手动创建每个实体对象**。 如果我使用ZF的原生数据库体系结构,痛苦会少很多


我已经做了一些编码,现在它自动完成了一半,但不是很有用。

您应该将这种逻辑编程到您的模型中

例如,我通常在表单中添加这种逻辑

class Application_Form_SomeModel extends Zend_Form
{
    // the usual stuff

    public function populateModel(\Entity\Model $model)
    {
        $model->setSomething($this->getValue('something'));

        $subForm = $this->getSubForm('name');

        $relatedModel = new \Entity\RelatedModel;
        $relatedModel->setSomething($subForm->getValue('something'));

        $model->getRelatedModels()->add($relatedModel);

        // assuming the related model collection has cascade persist
        // otherwise you'll need to pass in the entity manager to persist
        // the new model
    }
}

我这样做是因为表单的元素实际上只有表单知道。这允许您在表单中封装与表单及其元素名称相关的所有内容,而不必假设其他任何人都知道此信息。

您应该将此类逻辑编程到您的模型中

例如,我通常在表单中添加这种逻辑

class Application_Form_SomeModel extends Zend_Form
{
    // the usual stuff

    public function populateModel(\Entity\Model $model)
    {
        $model->setSomething($this->getValue('something'));

        $subForm = $this->getSubForm('name');

        $relatedModel = new \Entity\RelatedModel;
        $relatedModel->setSomething($subForm->getValue('something'));

        $model->getRelatedModels()->add($relatedModel);

        // assuming the related model collection has cascade persist
        // otherwise you'll need to pass in the entity manager to persist
        // the new model
    }
}

我这样做是因为表单的元素实际上只有表单知道。这允许您在表单中封装与表单及其元素名称相关的所有内容,而不必假设其他任何人都知道这些信息。

我认为最好的解决方案是使用PHP从实体中注入/检索值,同时使用smart get/set检测。我启动了一个名为ObjectSerializer的小库来帮助完成这个过程,但从未完成。这就是说,如果你看看其中包含的逻辑,你可能会知道从哪里开始

我认为最好的解决方案是使用PHP从实体中注入/检索值,同时使用智能get/set检测。我启动了一个名为ObjectSerializer的小库来帮助完成这个过程,但从未完成。这就是说,如果你看看其中包含的逻辑,你可能会知道从哪里开始

感谢您为发布这一富有成效的答案所做的努力,但这并不能解决我的问题。我在客户端使用extjs,所以我可能不需要子窗体。我只需要用于验证筛选和预切分输入值的窗体。$model->setSomething$this->getValue'something';需要为每个发布的值设置方法。难道没有像symfony这样更智能的解决方案吗?我通常在控制器中这样做。感谢您为发布这个富有成效的答案所做的努力,但这并不能解决我的问题。我在客户端使用extjs,所以我可能不需要子表单。我只需要输入用于验证筛选和预切的表单值。$model->setSomething$this->getValue'something';需要为每个发布的值设置方法。难道没有比symfony更聪明的解决方案吗?我通常在控制器中这样做。虽然您的答案不是现成的解决方案,但它很有启发性和成效。我正在研究您的解决方案,如果我成功,我会就您的git项目与您联系。而您的答案不是现成的解决方案我正在研究你的解决方案,如果我成功了,我会就你的git项目与你联系。