使用空的依赖字段编辑Symfony 2表单

时间:2017-04-21 02:07:38

标签: php forms symfony edit

我在我的CRUD中进行表单编辑时遇到问题,我使用命令从symfony 2.8创建crud,当在EDIT视图中检查时,它会加载我搜索的记录的所有字段,但依赖字段另一个实体看起来是空的(现场货物,专业,rol,departamento)。我想知道如何使依赖字段显示各自的信息。

这是我的DatUsuarioType

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder->add('username',TextType::class, array('attr'=>array('class'=>'form-control col-xs-10 col-sm-5', 'style' => 'margin-bottom:10px'),'label'=>'Usuario'))
            ->add('password',PasswordType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px')))
            ->add('nombre',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px')))
            ->add('paterno',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Apellido Paterno'))
            ->add('materno',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Apellido Materno'))
            ->add('ci',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Carnet de Identidad'))
            ->add('departamento',EntityType::class, array('class'=>'bdBundle:ClaDepartamento','label'=>'Departamento', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
            ->add('fechaNac',DateType::class, array('widget'=>'single_text', 'html5' => false, 'input' => 'datetime','label'=>'Fecha de Nacimiento','format'=>'dd/MM/yyyy', 'attr'=> ['class'=>'form-control js-datepicker', 'style' => 'margin-bottom:10px','placeholder'=>'dd/mm/yyyy', 'readonly'=>true]))
            ->add('telefono',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Telefono Fijo'))
            ->add('celular',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Telefono Celular'))
            ->add('email',EmailType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Correo Electronico'))
            ->add('rol',EntityType::class, array('class'=>'bdBundle:DatRol','label'=>'Rol de Usuario', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
            ->add('cargoUsuario',EntityType::class, array('class'=>'bdBundle:DatCargoUsuario','label'=>'Cargo de Usuario', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
            ->add('profesion',EntityType::class, array('class'=>'bdBundle:ClaProfesion','label'=>'Profesion de Usuario', 'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'data' => '$id', 'placeholder' => 'Escoge una Opcion',))
            ->add('imagen',TextType::class, array('attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Foto de Perfil'))
            ->add('estado',ChoiceType::class, array('choices'=>array(true=> 'Habilitado'),'attr'=>array('class'=>'form-control', 'style' => 'margin-bottom:10px'),'label'=>'Activo / Inactivo'));


}

这是我的Controller DatUsuarioController

public function editAction(Request $request, DatUsuario $datUsuario)
{
    $deleteForm = $this->createDeleteForm($datUsuario);
    $editForm = $this->createForm('gishay\bdBundle\Form\DatUsuarioType', $datUsuario);
    $editForm->handleRequest($request);

    if ($editForm->isSubmitted() && $editForm->isValid()) {
        $this->getDoctrine()->getManager()->flush();

        return $this->redirectToRoute('usuario_edit', array('id' => $datUsuario->getId()));
    }

    return $this->render('datusuario/edit.html.twig', array(
        'datUsuario' => $datUsuario,
        'edit_form' => $editForm->createView(),
        'delete_form' => $deleteForm->createView(),
    ));
}

这是我的观点edit.html.twig

的一部分
<div class="panel-body">
                            {{ form_start(edit_form) }}
                            {{ form_errors(edit_form) }}

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="username">Usuario</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.username, { 'attr': {'readonly': 'true'} }) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="password">Password</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.password, { 'attr': {'readonly': 'true'} }) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="nombre">Nombre</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.nombre) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="paterno">Apellido Paterno</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.paterno) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="materno">Apellido Materno</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.materno) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="ci">Carnet de Identidad</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.ci) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="departamento">Expedido</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.departamento) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="fechanac">Fecha de Nacimiento</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.fechaNac) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="telefono">Telefono</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.telefono) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="celular">Celular</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.celular) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="email">Email</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.email) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="rol">Rol</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.rol) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="cargo">Cargo de Usuario</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.cargoUsuario) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="profesion">Profesion</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.profesion) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="imagen">Imagen</label>
                                    <div class="col-md-9">
                                        {{ form_widget(edit_form.imagen) }}
                                    </div>
                                </div>

                                <div class="form-group">
                                    <label class="col-md-3 control-label" for="estado">Activo / Inactivo</label>
                                    <div class="col-md-9">

                                        {{ form_widget(edit_form.estado, { 'attr': {'readonly': 'true'} }) }}
                                    </div>
                                </div>
                            {{ form_end(edit_form) }}

                        </div>

这是我的实体DatUsuario.php

namespace gishay\bdBundle\Entity;

将Doctrine \ ORM \ Mapping用作ORM;

/ **  * DatUsuario  * / 类DatUsuario {     / **      * @var整数      * /     私人$ id;

/**
 * @var string
 */
private $username;

/**
 * @var string
 */
private $password;

/**
 * @var string
 */
private $nombre;

/**
 * @var string
 */
private $paterno;

/**
 * @var string
 */
private $materno;

/**
 * @var string
 */
private $ci;

/**
 * @var \DateTime
 */
private $fechaNac;

/**
 * @var string
 */
private $telefono;

/**
 * @var string
 */
private $celular;

/**
 * @var string
 */
private $email;

/**
 * @var string
 */
private $imagen;

/**
 * @var boolean
 */
private $estado;

/**
 * @var \gishay\bdBundle\Entity\DatRol
 */
private $rol;

/**
 * @var \gishay\bdBundle\Entity\ClaDepartamento
 */
private $departamento;

/**
 * @var \gishay\bdBundle\Entity\DatCargoUsuario
 */
private $cargoUsuario;

/**
 * @var \gishay\bdBundle\Entity\ClaProfesion
 */
private $profesion;

public function __toString()
{
  return $this->getUsername();
}

public function __construct()
{
  $this->DatUsuario = new ArrayCollection();
}

/**
 * Get id
 *
 * @return integer 
 */
public function getId()
{
    return $this->id;
}

/**
 * Set username
 *
 * @param string $username
 * @return DatUsuario
 */
public function setUsername($username)
{
    $this->username = $username;

    return $this;
}

/**
 * Get username
 *
 * @return string 
 */
public function getUsername()
{
    return $this->username;
}

/**
 * Set password
 *
 * @param string $password
 * @return DatUsuario
 */
public function setPassword($password)
{
    $this->password = $password;

    return $this;
}

/**
 * Get password
 *
 * @return string 
 */
public function getPassword()
{
    return $this->password;
}

/**
 * Set nombre
 *
 * @param string $nombre
 * @return DatUsuario
 */
public function setNombre($nombre)
{
    $this->nombre = $nombre;

    return $this;
}

/**
 * Get nombre
 *
 * @return string 
 */
public function getNombre()
{
    return $this->nombre;
}

/**
 * Set paterno
 *
 * @param string $paterno
 * @return DatUsuario
 */
public function setPaterno($paterno)
{
    $this->paterno = $paterno;

    return $this;
}

/**
 * Get paterno
 *
 * @return string 
 */
public function getPaterno()
{
    return $this->paterno;
}

/**
 * Set materno
 *
 * @param string $materno
 * @return DatUsuario
 */
public function setMaterno($materno)
{
    $this->materno = $materno;

    return $this;
}

/**
 * Get materno
 *
 * @return string 
 */
public function getMaterno()
{
    return $this->materno;
}

/**
 * Set ci
 *
 * @param string $ci
 * @return DatUsuario
 */
public function setCi($ci)
{
    $this->ci = $ci;

    return $this;
}

/**
 * Get ci
 *
 * @return string 
 */
public function getCi()
{
    return $this->ci;
}

/**
 * Set fechaNac
 *
 * @param \DateTime $fechaNac
 * @return DatUsuario
 */
public function setFechaNac($fechaNac)
{
    $this->fechaNac = $fechaNac;

    return $this;
}

/**
 * Get fechaNac
 *
 * @return \DateTime 
 */
public function getFechaNac()
{
    return $this->fechaNac;
}

/**
 * Set telefono
 *
 * @param string $telefono
 * @return DatUsuario
 */
public function setTelefono($telefono)
{
    $this->telefono = $telefono;

    return $this;
}

/**
 * Get telefono
 *
 * @return string 
 */
public function getTelefono()
{
    return $this->telefono;
}

/**
 * Set celular
 *
 * @param string $celular
 * @return DatUsuario
 */
public function setCelular($celular)
{
    $this->celular = $celular;

    return $this;
}

/**
 * Get celular
 *
 * @return string 
 */
public function getCelular()
{
    return $this->celular;
}

/**
 * Set email
 *
 * @param string $email
 * @return DatUsuario
 */
public function setEmail($email)
{
    $this->email = $email;

    return $this;
}

/**
 * Get email
 *
 * @return string 
 */
public function getEmail()
{
    return $this->email;
}

/**
 * Set imagen
 *
 * @param string $imagen
 * @return DatUsuario
 */
public function setImagen($imagen)
{
    $this->imagen = $imagen;

    return $this;
}

/**
 * Get imagen
 *
 * @return string 
 */
public function getImagen()
{
    return $this->imagen;
}

/**
 * Set estado
 *
 * @param boolean $estado
 * @return DatUsuario
 */
public function setEstado($estado)
{
    $this->estado = $estado;

    return $this;
}

/**
 * Get estado
 *
 * @return boolean 
 */
public function getEstado()
{
    return $this->estado;
}

/**
 * Set rol
 *
 * @param \gishay\bdBundle\Entity\DatRol $rol
 * @return DatUsuario
 */
public function setRol(\gishay\bdBundle\Entity\DatRol $rol = null)
{
    $this->rol = $rol;

    return $this;
}

/**
 * Get rol
 *
 * @return \gishay\bdBundle\Entity\DatRol 
 */
public function getRol()
{
    return $this->rol;
}

/**
 * Set departamento
 *
 * @param \gishay\bdBundle\Entity\ClaDepartamento $departamento
 * @return DatUsuario
 */
public function setDepartamento(\gishay\bdBundle\Entity\ClaDepartamento $departamento = null)
{
    $this->departamento = $departamento;

    return $this;
}

/**
 * Get departamento
 *
 * @return \gishay\bdBundle\Entity\ClaDepartamento 
 */
public function getDepartamento()
{
    return $this->departamento;
}

/**
 * Set cargoUsuario
 *
 * @param \gishay\bdBundle\Entity\DatCargoUsuario $cargoUsuario
 * @return DatUsuario
 */
public function setCargoUsuario(\gishay\bdBundle\Entity\DatCargoUsuario $cargoUsuario = null)
{
    $this->cargoUsuario = $cargoUsuario;

    return $this;
}

/**
 * Get cargoUsuario
 *
 * @return \gishay\bdBundle\Entity\DatCargoUsuario 
 */
public function getCargoUsuario()
{
    return $this->cargoUsuario;
}

/**
 * Set profesion
 *
 * @param \gishay\bdBundle\Entity\ClaProfesion $profesion
 * @return DatUsuario
 */
public function setProfesion(\gishay\bdBundle\Entity\ClaProfesion $profesion = null)
{
    $this->profesion = $profesion;

    return $this;
}

/**
 * Get profesion
 *
 * @return \gishay\bdBundle\Entity\ClaProfesion 
 */
public function getProfesion()
{
    return $this->profesion;
}

}

任何人都可以帮助我.. :)

Sry ......这是我在YML DatUsuario中的ORM

gishay\bdBundle\Entity\DatUsuario:
type: entity
table: dat_usuario
indexes:
    dat_usuario_FKIndex1:
        columns:
            - rol_id
    dat_usuario_FKIndex2:
        columns:
            - departamento_id
    dat_usuario_FKIndex3:
        columns:
            - cargo_usuario_id
    dat_usuario_FKIndex4:
        columns:
            - profesion_id
id:
    id:
        type: integer
        nullable: false
        unsigned: true
        id: true
        generator:
            strategy: IDENTITY
fields:
    username:
        type: string
        nullable: false
        length: 25
        fixed: false
    password:
        type: string
        nullable: false
        length: 255
        fixed: false
    nombre:
        type: string
        nullable: false
        length: 45
        fixed: false
    paterno:
        type: string
        nullable: true
        length: 45
        fixed: false
    materno:
        type: string
        nullable: true
        length: 45
        fixed: false
    ci:
        type: string
        nullable: false
        length: 15
        fixed: false
    fechaNac:
        type: date
        nullable: true
        column: fecha_nac
    telefono:
        type: string
        nullable: true
        length: 10
        fixed: false
    celular:
        type: string
        nullable: true
        length: 10
        fixed: false
    email:
        type: string
        nullable: true
        length: 45
        fixed: false
    imagen:
        type: string
        nullable: true
        length: 100
        fixed: false
    estado:
        type: boolean
        nullable: true
manyToOne:
    rol:
        targetEntity: DatRol
        inversedBy: DatUsuario
        joinColumns:
            rol_id:
                referencedColumnName: id
        orphanRemoval: false
    departamento:
        targetEntity: ClaDepartamento
        cascade: {  }
        mappedBy: null
        inversedBy: null
        joinColumns:
            departamento_id:
                referencedColumnName: id
        orphanRemoval: false
    cargoUsuario:
        targetEntity: DatCargoUsuario
        cascade: {  }
        mappedBy: null
        inversedBy: null
        joinColumns:
            cargo_usuario_id:
                referencedColumnName: id
        orphanRemoval: false
    profesion:
        targetEntity: ClaProfesion
        cascade: {  }
        mappedBy: null
        inversedBy: null
        joinColumns:
            profesion_id:
                referencedColumnName: id
        orphanRemoval: false
lifecycleCallbacks: {  }

这是我的DatRol

gishay\bdBundle\Entity\DatRol:
type: entity
table: dat_rol
id:
    id:
        type: integer
        nullable: false
        unsigned: true
        id: true
        generator:
            strategy: IDENTITY
fields:
    rol:
        type: string
        nullable: false
        length: 50
        fixed: false
    abreviacion:
        type: string
        nullable: true
        length: 50
        fixed: false
    estado:
        type: boolean
        nullable: true
oneToMany:
    DatUsuario:
      targetEntity: DatUsuario
      mappedBy: rol
      fetch: EXTRA_LAZY
lifecycleCallbacks: {  }

感谢您再次回答,...但在我的编辑表单中继续字段Rol,Profesion等...是空白选择...再次我需要选择... 我尝试使用Class DatRol ......其他人还没有...... 我需要在字段中选择此选择数据库的数据... thanx

1 个答案:

答案 0 :(得分:1)

好的,现在我明白了。

您的所有关系都是单向的,因为您有mappedBy: nullinversedBy: null 这就是为什么symfony认为你会像

那样设置关系的原因
// manual relations
$datUsuario->setRol( $yourRoleEntity );
$datUsuario->setDepartamento( $yourRoleEntity );
// and so on..
// but I think you don't want that....

// form
$editForm = $this->createForm('gishay\bdBundle\Form\DatUsuarioType', $datUsuario);

还有可能 - 您还没有在DatRolClaDepartamentoDatCargoUsuario表格中找到任何记录。这就是为什么下拉列表是空的......如果是这样的话,先添加一些数据!

但是,回到你们的关系......

Check this great reference

如您所见,您应该声明

manyToOne:
    rol:
        targetEntity: DatRol
        cascade: { 'persist' } # Play around with other settings...
        #remove this since it's incorret. you can't have both!
        #mappedBy: null 
        inversedBy: datUsario
        joinColumns:
            rol_id:
                referencedColumnName: id
        orphanRemoval: false

    # do the same for all others manyToOne relations

完成后,请转到DatRolClaDepartamentoDatCargoUsuarioClaProfesion,然后修改oneToMany关系。删除inversedBy和添加mapeedBy

像:

oneToMany:
    datUsario: 
        targetEntity: DatUsuario
        mappedBy: rol
        fetch: EXTRA_LAZY

在所有其他人中也这样做......

<强>原则进行的拇指:

  • inversedBy始终位于FOREIGN KEY所在的一侧(manyToMany 是例外,有关详细信息,请参阅ormcheatsheet)
  • mappedBy在另一边

如需更多信息,请查看上方的ormcheatsheetDoctrine's One-To-Many, Bidirectional