Сохранение данных сложной формы в Zend Framework с использованием доктрины 2 - PullRequest
2 голосов
/ 18 августа 2011

Интеграция Doctrine 2 в ZF, кажется, делает простые вещи очень сложными и трудоемкими (по крайней мере, для меня).

Я не могу просто передать отправленный массив форм доктрине для автоматического сопоставления пар ключ / значение с сущностями доктрины, и это становится очень сложным, если у меня есть сущность "многие ко многим", а отправленная форма имеет вложенный массив.

В symfony представленные ключи / значения формы легко и АВТОМАТИЧЕСКИ отображаются и сохраняются в таблицах доктрин. Я не знаю, как это сделать в ZF, особенно если у меня есть сущности доктрины «многие ко многим» и / или «многие к одному», и у меня ** вложенные элементы формы, которые требуют многоуровневой итерации.

Я не хочу явно устанавливать каждую сущность и вручную создавать каждый объект сущности **.
Боль была бы намного меньше, если бы я использовал собственную архитектуру базы данных ZF.

Я сделал некоторое кодирование, и теперь оно выполняется наполовину автоматически, но не очень полезно.

Ответы [ 2 ]

0 голосов
/ 29 ноября 2011

Я думаю, что лучшее решение - это использовать PHP Reflection API для ввода / извлечения значений из ваших сущностей (также с использованием интеллектуального обнаружения get / set). Я запустил небольшую библиотеку ObjectSerializer, чтобы помочь с процессом, но так и не закончил. Тем не менее, если вы посмотрите на логику, содержащуюся в этих двух классах , вы можете получить хорошее представление, с чего начать.

0 голосов
/ 18 августа 2011

Вы должны программировать такую ​​логику в своих моделях.

Я обычно добавляю такую ​​логику в свою форму, например

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
    }
}

Я делаю это таким образом из-заФактически, элементы формы действительно известны только форме.Это позволяет вам инкапсулировать все, что связано с формой и именами ее элементов, без необходимости предполагать, что кто-то еще знает эту информацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...