Вы должны удалить все ненужные поля формы во второй форме (конечно, вы должны оставить скрытое поле с идентификатором записи).
По сути, вы просто обновляете запись со второй формой, чтобы каждое обязательное поле в вашей базе данных уже было значением.
Будет полезно, если вы отправите код второй формы.
Итак, в целом, ваш подход верен (возможно, есть более эффективные способы, которых я не знаю), просто убедитесь, что ваш код правильный.
Edit:
Так что, если я вас правильно понял, то форма, которую вы используете в своем коде, обновляет существующий объект. Вы должны передать этот объект в форму, которая знает, что объект уже существует, и может соответствующим образом проверить значения:
public function executeStepOne(sfWebRequest $request){
$this->customer = Doctrine::getTable('Customer')->find(1);
$this->forward404Unless($this->customer);
$this->form = new CustomerFormStepOne($this->customer);
if ($request->isMethod(sfRequest::POST)){
$this->processRegisterForm($request, $this->form,'paso2');
}
В случае ошибки дублирующего ключа проверьте определение базы данных, если первичный ключ этой таблицы увеличивается автоматически.