2017-04-21 84 views
2

我有一個問題,使我的表單編輯在我的CRUD中,我使用命令從symfony 2.8創建crud時,在編輯視圖中檢查時,它加載記錄的所有字段我搜索,但另一個實體的依賴字段顯示爲空(字段貨物,profesion,rol,departamento)。我想知道如何使相關字段顯示各自的信息。Symfony 2表單編輯與空的相關字段

這是我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')); 


} 

這是我的控制器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基因......這是我在陽明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等...是空的無選擇...並且我需要再次選擇... 我嘗試過類DatRol ...其他人還沒有... 我需要在字段中選擇這個選定的數據庫的數據... thanx

+0

我沒有看到你的實體的任何關係和列名。如果你不使用PHP註釋,那麼你必須使用'yml'你可以發佈它嗎? –

+0

對不起..我忘了把關係..但是關係已經..請看它吧.... @ V-Light – JuanquiMon

回答

1

好吧,現在我明白了。

你所有的關係都是單向的,因爲你有mappedBy: nullinversedBy: null 這就是爲什麼symfony的認爲你會建立關係manualy像

// 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); 

什麼也有可能 - 你只是沒有在任何記錄您的DatRol,ClaDepartamento,DatCargoUsuario桌子。這就是爲什麼下拉列表爲空的原因......如果是這樣,請先添加一些數據!

但是,回到你的關係......

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和ADD mapeedBy

,如:

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

做相同的其他所有...

規則經驗法則:

  • inversedBy總是在FOREIGN KEY所在的地方(manyToMany 是例外情況,詳見ormcheatsheet for more在另一邊

欲瞭解更多信息細節)

  • mappedBy從上面檢查ormcheatsheetDoctrine's One-To-Many, Bidirectional

  • +0

    我再次更新,看它請V-Light ...我期待爲我們的評論... – JuanquiMon

    +0

    親愛的V-Ligth,我再次嘗試,我有我的雙向關係......但是,問題仍然存在..我的課程,專業等,有記錄...我認爲問題是在形式..我只是再次更新了代碼,請檢查 – JuanquiMon

    +1

    親愛的V-Light,...完成了。您完全有理由,在進行修改後重新映射,現在如果它正常工作......關鍵是級聯:[「堅持」],如果它的工作正確..非常感謝...我想給你5顆星!!! .. =) – JuanquiMon