0

zend_formを 2 つのエンティティにフラッシュするのに苦労しています。合計で、私は 3 つのエンティティを持っています。ユーザー、住所、国。Country は、ID のみが Address に入る標準的な値を持っているため、興味深いものではありません。私の追加アクションはうまく機能します (住所/国を空のままにしておくと、データベースに新しいレコードが作成されるため、これを修正する必要があります)。しかし、私の編集は最新のバインドのみをフラッシュします。私の編集アクション:

/**
     * Edit action for single user
     * 
     * @return route zfcadmin/user/add
     * @return route zfcadmin/user
     * @return array(id, form, flashMessages)
*/
public function editAction()
{
    $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
    if (!$id) {
        return $this->redirect()->toRoute('zfcadmin/user/', array('action' => 'add'));
    }
    //Get user with the id (given in URL), and pick his address(es)
    $user = $this->getEntityManager()->find('User\Entity\User', $id);
    $addresses = $user->addresses;

    $form = new UserForm();

    //Set country values out of the entity
    $form = $this->fillCountrySelectbox($form);
    $form->bind($user);

    //Get addresses from the user, and bind it to the $form
    foreach($addresses as $address) {
        //If user has address, bind the addresses
        if(isset($address)) {
            $form->bind($address);
        }
    }

    $form->get('save_goback')->setAttribute('value', 'Save');
    $form->get('save')->setAttribute('value', 'Save & Stay');

    $request = $this->getRequest();
    if ($request->isPost()) {
        //Set the inputfilter on the input values
        $inputFilter = new InputFilter();

        //Set filters from different entities
        $inputFilter = $user->setFilters($inputFilter);
        $inputFilter = $address->setFilters($inputFilter);

        //Set the inputFilter on the form
        $form->setInputFilter($inputFilter);

        $form->setData($request->getPost());
        if ($form->isValid()) {
            $form->bindValues();

            //set complete country object in address entity.
            $country = $this->getEntityManager()->find('User\Entity\Country', $form->get('country')->getValue());
            $address->__set('country', $country);

            //Set country Null when no country was selected, otherwise it conflict with country entity (because no '' is set)
            if($address->country == '') {
                $address->country = NULL;
            }

            //Set modifier (current user)
            $address->__set('last_modifier_id', $this->zfcUserAuthentication()->getIdentity()->getId());

            $this->flashMessenger()->addMessage('User saved');

            $this->getEntityManager()->flush();

            if ($this->getRequest()->getPost('save_goback')) {
                return $this->redirect()->toRoute('zfcadmin/user');
            }
        }
    }

    return array(
        'id' => $id,
        'form' => $form,
        'flashMessages' => $this->flashMessenger()->getMessages()
    );
}

アドレスをバインドしないとユーザーエンティティにフラッシュされ、アドレスをバインドするとアドレスのみにフラッシュされるため、ユーザーの編集は機能しません。ユーザーとアドレスを保存してフォームを編集するにはどうすればよいですか?

4

0 に答える 0