public function edit(ModelInterface $model, array $post, Form $form = null)
    {
        $form = ($form instanceof Form) ?
            $form->setData($post) :
            $this->prepareForm($model, $post, true, true);
        $argv = compact('model', 'post', 'form');
        $argv = $this->prepareEventArguments($argv);

        $this->getEventManager()->trigger(self::EVENT_PRE_EDIT, $this, $argv);

        if (!$form->isValid()) {
            return $form;
        }

        $saved  = $this->save($form->getData());
        $argv   = compact('model', 'post', 'form', 'saved');
        $argv   = $this->prepareEventArguments($argv);

        $this->getEventManager()->trigger(self::EVENT_POST_EDIT, $this, $argv);

        $eventSaved = (isset($argv['result'])) ? $argv['result'] : false;

        return (!$saved && !$eventSaved) ? false : true;
    }