Php 在Symfony 1.4.20中发送表单时未保存数据

Php 在Symfony 1.4.20中发送表单时未保存数据,php,forms,symfony1,symfony-1.4,symfony-forms,Php,Forms,Symfony1,Symfony 1.4,Symfony Forms,我有一个名为PersonaForm.class.php的表单类,下面是该类中的代码: class PersonaForm extends BasePersonaForm { private $enfermedades_noseleccionadas = array(); private $antecedentes_noseleccionados = array(); private $adicciones_noseleccionadas = array(); p

我有一个名为PersonaForm.class.php的表单类,下面是该类中的代码:

class PersonaForm extends BasePersonaForm {

    private $enfermedades_noseleccionadas = array();
    private $antecedentes_noseleccionados = array();
    private $adicciones_noseleccionadas = array();
    private $alteraciones_noseleccionadas = array();
    private $intolerancias_noseleccionadas = array();

    public function configure() {
        $this->widgetSchema['nombres'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Nombres', 'class' => 'span4', 'required' => 'required'));
        $this->widgetSchema['apellidos'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Apellidos', 'class' => 'span4', 'required' => 'required'));
        $this->widgetSchema['edad'] = new sfWidgetFormInputText(array(), array('class' => 'span1'));
        $this->widgetSchema['estatura'] = new sfWidgetFormInputText(array(), array('class' => 'span1'));
        $this->widgetSchema['lugar_nacimiento'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Lugar de Nacimiento', 'class' => 'span4'));
        $this->widgetSchema['urbanizacion_sector'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Urbanización/Sector', 'class' => 'span4'));
        $this->widgetSchema['calle_avenida'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Calle/Avenida', 'class' => 'span4'));
        $this->widgetSchema['edificio_casa'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Edificio/Casa Nro.', 'class' => 'span4'));
        $this->widgetSchema['piso'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Piso', 'class' => 'span4'));
        $this->widgetSchema['apto'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Apartamento', 'class' => 'span4'));
        $this->widgetSchema['zona_postal'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Zona Postal', 'class' => 'span4'));
        $this->widgetSchema['profesion'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Profesión', 'class' => 'span4'));
        $this->widgetSchema['ocupacion'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Ocupación', 'class' => 'span4'));
        $this->widgetSchema['telefono_fijo'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Teléfono Fijo', 'class' => 'span4'));
        $this->widgetSchema['celular'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Celular', 'class' => 'span4'));
        $this->widgetSchema['correo_electronico'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Correo Electrónico', 'class' => 'span4'));
        $this->widgetSchema['empresa'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Empresa', 'class' => 'span4'));
        $this->widgetSchema['urbanizacion_empresa'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Urbanización Empresa', 'class' => 'span4'));
        $this->widgetSchema['telefono_oficina'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Teléfono Oficina', 'class' => 'span4'));
        $this->widgetSchema['fax_oficina'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Fax Oficina', 'class' => 'span4'));
        $this->widgetSchema['persona_recomienda'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Persona que lo recomendó', 'class' => 'span4'));

        $this->widgetSchema['estado_civil'] = new sfWidgetFormSelectRadio(array('choices' => array('d' => 'Divorciado', 'c' => 'Casado', 's' => 'Soltero', 'co' => 'Concubinato'), 'formatter' => array($this, 'RadioFormatterCallback')));
        $this->widgetSchema['sexo'] = new sfWidgetFormSelectRadio(array('choices' => array('m' => 'Hombre', 'f' => 'Mujer'), 'formatter' => array($this, 'RadioFormatterCallback')));

        $this->widgetSchema['estado_id'] = new sfWidgetFormDoctrineDependentSelect(array(
            'model' => 'Estado',
            'add_empty' => 'Seleccione estado',
            'ajax' => true
        ));

        $this->widgetSchema['municipio_id'] = new sfWidgetFormDoctrineDependentSelect(array(
            'model' => 'Municipio',
            'depends' => 'Estado',
            'add_empty' => 'Seleccione municipio',
            'ajax' => true,
            'order_by' => array('nombre', 'asc')
        ));

        $this->widgetSchema['fecha_nacimiento'] = new sfWidgetFormDateTime(array('date' => array('format' => '%day%-%month%-%year%'), 'with_time' => false));

        $this->validatorSchema['estado_id'] = new sfValidatorDoctrineChoice(array('model' => 'Estado'));
        $this->validatorSchema['municipio_id'] = new sfValidatorDoctrineChoice(array('model' => 'Municipio'));
        $this->validatorSchema['correo_electronico'] = new sfValidatorEmail(array('required' => true), array('invalid' => 'La dirección de correo no es válida'));


        $historia_clinica = new Hclinica();
        $historia_clinica->setPersona($this->getObject());
        $this->embedForm('historia_clinica', new HclinicaForm($historia_clinica));

        $antecedentes = Doctrine::getTable('Antecedentes')->findAll();
        foreach ($antecedentes as $antecedente) {
            $personaHasAntecedentes = new PersonaHasAntecedentes();
            $personaHasAntecedentes->setAntecedentes($antecedente);
            $personaHasAntecedentes->setPersona($this->getObject());

            $this->embedForm('antecedente_' . $antecedente->getId(), new PersonaHasAntecedentesForm($personaHasAntecedentes));
        }

        $adicciones = Doctrine::getTable('Adicciones')->findAll();
        foreach ($adicciones as $adiccion) {
            $personaHasAdicciones = new PersonaHasAdicciones();
            $personaHasAdicciones->setAdicciones($adiccion);
            $personaHasAdicciones->setPersona($this->getObject());

            $this->embedForm('adiccion_' . $adiccion->getId(), new PersonaHasAdiccionesForm($personaHasAdicciones));
        }

        $intolerancias = Doctrine::getTable('Intolerancias')->findAll();
        foreach ($intolerancias as $intolerancia) {
            $personaHasIntolerancias = new PersonaHasIntolerancias();
            $personaHasIntolerancias->setIntolerancias($intolerancia);
            $personaHasIntolerancias->setPersona($this->getObject());

            $this->embedForm('intolerancia_' . $intolerancia->getId(), new PersonaHasIntoleranciasForm($personaHasIntolerancias));
        }

        $enfermedades = Doctrine::getTable('Enfermedades')->findAll();
        foreach ($enfermedades as $enfermedad) {
            $personaHasEnfermedades = new PersonaHasEnfermedades();
            $personaHasEnfermedades->setEnfermedades($enfermedad);
            $personaHasEnfermedades->setPersona($this->getObject());

            $this->embedForm('enfermedad_' . $enfermedad->getId(), new PersonaHasEnfermedadesForm($personaHasEnfermedades));
        }

        $alteraciones = Doctrine::getTable('Alteraciones')->findAll();
        foreach ($alteraciones as $alteracion) {
            $personaHasAlteraciones = new PersonaHasAlteraciones();
            $personaHasAlteraciones->setAlteraciones($alteracion);
            $personaHasAlteraciones->setPersona($this->getObject());

            $this->embedForm('alteracion_' . $alteracion->getId(), new PersonaHasAlteracionesForm($personaHasAlteraciones));
        }
    }

    public function doBind(array $values) {
        $alteraciones = Doctrine::getTable('Alteraciones')->findAll();
        foreach ($alteraciones as $alteracion) {
            if (empty($values['alteracion_' . $alteracion->getId()]['selected'])) {
                $this->alteraciones_noseleccionadas[] = $alteracion->getId();
            }
        }

        $adicciones = Doctrine::getTable('Adicciones')->findAll();
        foreach ($adicciones as $adiccion) {
            if (empty($values['adiccion_' . $adiccion->getId()]['selected'])) {
                $this->adicciones_noseleccionadas[] = $adiccion->getId();
            }
        }

        $intolerancias = Doctrine::getTable('Intolerancias')->findAll();
        foreach ($intolerancias as $intolerancia) {
            if (empty($values['intolerancia_' . $intolerancia->getId()]['selected'])) {
                $this->intolerancias_noseleccionadas[] = $intolerancia->getId();
            }
        }

        $enfermedades = Doctrine::getTable('Enfermedades')->findAll();
        foreach ($enfermedades as $enfermedad) {
            if (empty($values['enfermedad_' . $enfermedad->getId()]['selected'])) {
                $this->enfermedades_noseleccionadas[] = $enfermedad->getId();
            }
        }
        return parent::doBind($values);
    }

    //modificar la funcion doSave
    public function doSave($con = null) {
        if (!$this->isNew()) {
            foreach ($this->intolerancias_noseleccionadas as $intolerancia_id) {
                unset($this->embeddedForms["intolerancia_" . $intolerancia_id]);
                Doctrine::getTable('PersonaHasIntolerancias')->createQuery()->delete()->where("id_persona = ? and id_intolerancias = ?", array($this->getObject()->getId(), $intolerancia_id))->execute();
            }

            foreach ($this->adicciones_noseleccionadas as $adiccion_id) {
                unset($this->embeddedForms["adiccion_" . $adiccion_id]);
                Doctrine::getTable('PersonaHasAdicciones')->createQuery()->delete()->where("id_persona = ? and id_adiciones = ?", array($this->getObject()->getId(), $adiccion_id))->execute();
            }

            foreach ($this->alteraciones_noseleccionadasas as $alteracion_id) {
                unset($this->embeddedForms["alteracion_" . $alteracion_id]);
                Doctrine::getTable('PersonaHasAlteraciones')->createQuery()->delete()->where("id_persona = ? and id_alteraciones = ?", array($this->getObject()->getId(), $alteracion_id))->execute();
            }

            foreach ($this->enfermedades_noseleccionadas as $enfermedad_id) {
                unset($this->embeddedForms["enfermedad_" . $enfermedad_id]);
                Doctrine::getTable('PersonaHasEnfermedades')->createQuery()->delete()->where("id_persona = ? and id_enfermedades = ?", array($this->getObject()->getId(), $enfermedad_id))->execute();
            }
        }
    }

    public function RadioFormatterCallback($widget, $inputs) {
        $rows = array();
        foreach ($inputs as $input) {
            $rows[] = $widget->renderContentTag('label', $input['input'] . $widget->getOption('separator') . $input['label'], array('class' => 'radio inline'));
        }

        return !$rows ? '' : implode($widget->getOption('separator'), $rows);
    }
}
以及另一个名为HclinicaForm.class.php的表单类,其代码如下:

class HclinicaForm extends BaseHclinicaForm {

    public function configure() {
        $this->widgetSchema['medicamentos'] = new sfWidgetFormSelectRadio(array('choices' => array('n' => 'No', 's' => 'Sí'), 'formatter' => array($this, 'RadioFormatterCallback')));
        $this->widgetSchema['motivo_consulta'] = new sfWidgetFormSelectRadio(array('choices' => array('c' => 'Celulitis', 's' => 'Sobrepeso', 'f' => 'Flacidez', 'o' => 'Otro'), 'formatter' => array($this, 'RadioFormatterCallback')));

        $this->widgetSchema['padre_vivo'] = new sfWidgetFormSelectRadio(array('choices' => array('s' => 'Sí', 'n' => 'No'), 'formatter' => array($this, 'RadioFormatterCallback')));
        $this->widgetSchema['causa_muerte_padre'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Causa de la muerte', 'class' => 'span3'));

        $this->widgetSchema['madre_vivo'] = new sfWidgetFormSelectRadio(array('choices' => array('s' => 'Sí', 'n' => 'No'), 'formatter' => array($this, 'RadioFormatterCallback')));
        $this->widgetSchema['causa_muerte_madre'] = new sfWidgetFormInputText(array(), array('placeholder' => 'Causa de la muerte', 'class' => 'span3'));

        $this->widgetSchema['recibe_inmunizacion'] = new sfWidgetFormSelectRadio(array('choices' => array('s' => 'Sí', 'n' => 'No'), 'formatter' => array($this, 'RadioFormatterCallback')));

        $this->widgetSchema['operacion_practicadas'] = new sfWidgetFormTextarea(array(), array('placeholder' => 'Escriba las operaciones a las cuales a sido sometido el paciente', 'class' => 'span9', 'rows' => 6));
        $this->widgetSchema['terapias_recibidas'] = new sfWidgetFormTextarea(array(), array('placeholder' => 'Escriba las terapias a las cuales a sido sometido el paciente', 'class' => 'span9', 'rows' => 6));
        $this->widgetSchema['alergias_medicamentes'] = new sfWidgetFormTextarea(array(), array('placeholder' => 'Escriba las alergias a medicamentos del paciente', 'class' => 'span9', 'rows' => 6));

        $this->widgetSchema['edad_primera_menstruacion'] = new sfWidgetFormInput(array(), array('class' => 'span1'));
        $this->widgetSchema['edad_menopausia'] = new sfWidgetFormInput(array(), array('class' => 'span1'));
        $this->widgetSchema['metodo_control_natal'] = new sfWidgetFormInput(array(), array('class' => 'span4'));

        $this->widgetSchema['deporte_practicado'] = new sfWidgetFormInput(array(), array('placeholder' => 'Deporte(s) que practica', 'class' => 'span5'));
        $this->widgetSchema['frecuencia'] = new sfWidgetFormInput(array(), array('placeholder' => 'Frecuencia', 'class' => 'span2'));

        $this->widgetSchema['enfermedad_actual'] = new sfWidgetFormInput(array(), array('placeholder' => 'Enfermedad actual', 'class' => 'span5'));

        $this->widgetSchema['veces_come_x_dia'] = new sfWidgetFormInput(array(), array('placeholder' => 'X', 'class' => 'input-mini'));
        $this->widgetSchema['estados_comida'] = new sfWidgetFormSelectCheckbox(array('choices' => array(1 => 'Es inapetente', 2 => 'Es normal', 3 => 'Muy apetente')));

        $this->widgetSchema['evacua_x_dia'] = new sfWidgetFormInput(array(), array('placeholder' => 'X', 'class' => 'input-mini'));
        $this->widgetSchema['veces_evacua'] = new sfWidgetFormSelectCheckbox(array('choices' => array('1' => 'Diaria', '2' => 'Interdiaria')));

        $this->widgetSchema['veces_orina_x_dia'] = new sfWidgetFormInput(array(), array('placeholder' => 'X', 'class' => 'input-mini'));
        $this->widgetSchema['cantidad_orina_x_dia'] = new sfWidgetFormSelectCheckbox(array('choices' => array(1 => 'Poca', 2 => 'Normal', 3 => 'Abundante')));

        $this->widgetSchema['sudoracion'] = new sfWidgetFormSelectCheckbox(array('choices' => array(1 => 'Escasa', 2 => 'Normal', 3 => 'Abundante')));

        $this->widgetSchema['horas_duerme'] = new sfWidgetFormSelectCheckbox(array('choices' => array(1 => 'Leve', 2 => 'Normal', 3 => 'Profundo')));

        $this->widgetSchema['menstruacion'] = new sfWidgetFormSelectCheckbox(array('choices' => array(1 => 'Regular', 2 => 'Irregular')));

        $this->widgetSchema['flujo'] = new sfWidgetFormSelectCheckbox(array('choices' => array(1 => 'Escaso', 2 => 'Normal', 3 => 'Abundante')));

        // These validators need to be checked because it's failing
        $this->validatorSchema['menstruacion'] = new sfValidatorPass();
        $this->validatorSchema['horas_duerme'] = new sfValidatorPass();
        $this->validatorSchema['veces_evacua'] = new sfValidatorPass();
        $this->validatorSchema['estados_comida'] = new sfValidatorPass();
        $this->validatorSchema['flujo'] = new sfValidatorPass();
        $this->validatorSchema['sudoracion'] = new sfValidatorPass();
        $this->validatorSchema['cantidad_orina_x_dia'] = new sfValidatorPass();
    }

    public function RadioFormatterCallback($widget, $inputs) {
        $rows = array();
        foreach ($inputs as $input) {
            $rows[] = $widget->renderContentTag('label', $input['input'] . $widget->getOption('separator') . $input['label'], array('class' => 'radio inline'));
        }

        return !$rows ? '' : implode($widget->getOption('separator'), $rows);
    }

}
当我发送表单时,没有保存任何数据,我被重定向到http://his.devserver/frontend_dev.php/persona/edit/id/ 由于这个错误

404 |未找到| SFERROR404异常 对象角色不存在

stack trace
at ()
in SF_ROOT_DIR/lib/vendor/symfony/lib/action/sfAction.class.php line 89 ...
  {

    if (!$condition)

    {

      throw new sfError404Exception($this->get404Message($message));

    }

  }


at sfAction->forward404Unless(, 'Object persona does not exist ().')
in SF_ROOT_DIR/apps/frontend/modules/persona/actions/actions.class.php
第31行。。。 在PersonalActions->executeEditobject'sfWebRequest' 在SF_ROOT_DIR/lib/vendor/symfony/lib/action/sfActions.class.php第60行中。。。 在sfActions->executeobject'sfWebRequest' 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfExecutionFilter.class.php中 第92行。。。 在sfExecutionFilter->executeActionobject'PersonalActions' 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfExecutionFilter.class.php中 第78行。。。 在sfExecutionFilter->handleActionobject'sfFilterChain',object'PersonalActions' 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfExecutionFilter.class.php中 第42行。。。 在sfExecutionFilter->executeobject'sfFilterChain' 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfFilterChain.class.php行中 53 ... 在sfFilterChain->执行 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfBasicSecurityFilter.class.php中 第72行。。。 在sfBasicSecurityFilter->executeobject'sfFilterChain' 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfFilterChain.class.php行中 53 ... 在sfFilterChain->执行 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfRenderingFilter.class.php中 第33行。。。 在sfRenderingFilter->executeobject'sfFilterChain' 在SF_ROOT_DIR/lib/vendor/symfony/lib/filter/sfFilterChain.class.php行中 53 ... 在sfFilterChain->执行 在SF_ROOT_DIR/lib/vendor/symfony/lib/controller/sfController.class.php中 第238行。。。 在sfController->转发“角色”、“编辑” 在SF_ROOT_DIR/lib/vendor/symfony/lib/controller/sfFrontWebController.class.php中 第48行。。。 在sfFrontWebController->调度 在SF_ROOT_DIR/lib/vendor/symfony/lib/util/sfContext.class.php第170行中。。。 在sfContext->dispatch 在SF_ROOT_DIR/web/frontend_dev.php第13行中

我查看了日志并看到以下内容:

10条令连接语句执行:选择p.id作为p\u id,p.sexo作为p\u sexo,p.nombres作为p\u nombres,p.apellidos作为 p_apellidos,p.fecha_Naciminto AS p_fecha_Naciminto,p.edad AS p_edad,p.estatura作为p_estatura,p.lugar_Naciminto作为 p_uuLugar_Naciminto,p.estado_civil作为p_uEstado_civil,p.direccion作为 p__direccion,p.urbanizacion_部门作为p_城市化部门, p、 calle_avenida作为p_calle_avenida,p.Budificio_casa作为 p_u大厦,p.piso作为p_piso,p.apto作为p_apto,p.zona_邮政 作为邮政区,作为邮政专业,作为邮政专业 p_ocupacion,p.telefono_fijo作为p_telefono_fijo,p.celular作为 p__celular,p.correo_electronico作为p__correo_electronico,p.empresa 作为p_uempresa,p.urbanizacion_empresa作为p_uUrbanizacion_empresa, p、 中国电信作为中国电信,中国传真作为 作为推荐人的推荐人, p、 estado_id作为p__estado_id,p.市政id作为p_市政id来自 人物角色p,其中p.id=?限制1-

11   sfError404Exception    Object persona does not exist ().

为什么它什么都不保存?有什么帮助或建议吗?

错误消息看起来很清楚:您没有Persona对象类

请参见使用如下命令行生成模型对象的步骤:

$ php symfony doctrine:build --model

好的,我发现我的错误了。我无法将parent::doSave$con添加到我的doSave方法中。由于这个原因,该函数不能保存任何内容。感谢所有人,希望解决方案能帮助其他人

是的,我有;我创建了所有的模型,所以这不是问题所在。正如您所看到的,第一个表单PersonaForm使用Persona模型来获取一些数据:所以它存在,j0k我试过了,但明天才能成功,所以我将在明天接受,谢谢