2012-05-11 15 views
17

¿Cómo puedo establecer el valor por defecto en el paquete de administración Sonata la opción faltan datos en el método configureFormFieldspuesta en Symfony2 Sonata de administración paquete

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name', null, array('required' => true, 'data' => "my default value")) 
    ; 
} 

cómo pueden utilizar los datos de atributos para establecer valor predeterminado dentro del campo ?? ?

+0

¿Cuál es el fieldType para el nombre? – Amit

Respuesta

41

Supongo que probablemente ya ha resuelto este por ahora, sino como una referencia a cualquier otra persona que puede reemplazar el método getNewInstance() y establecer el valor predeterminado del objeto:

public function getNewInstance() 
{ 
    $instance = parent::getNewInstance(); 
    $instance->setName('my default value'); 

    return $instance; 
} 
+0

Exactamente lo que estaba buscando. ¡Gracias! – Matheno

+0

@RobMasters ¿Qué sucede si el atributo que necesitamos mostrar es, de hecho, un método? – smarber

4

también puede asignar el valor por defecto a la propiedad de la entidad directamente:

class TheEntity 
{ 
    private $name = 'default name'; 
} 
+0

¿Por qué se rechaza esta respuesta? Funciona e implica el menor reemplazo del código de proveedor. La mejor respuesta. – FallenSquirrel

+0

@FallenSquirrel es un trabajo, pero creo que no es la solución deseada ya que OP probablemente quiere una solución en Sonata y no quiere tocar la propiedad de clase – GusDeCooL

5

Además de solución @RobMasters:

Si desea establecer una relación se puede obtener una referencia de la linea titymanager (en lugar del objeto completo):

public function getNewInstance() 
{ 
    $instance = parent::getNewInstance(); 

    if ($this->hasRequest()) { 
     $branch = $this->getRequest()->get('branch', null); 

     if ($branch !== null) { 
      $entityManager = $this->getModelManager()->getEntityManager('MyBundle\Entity\Branch'); 
      $branchReference = $entityManager->getReference('MyBundle\Entity\Branch', $branch); 

      $instance->setBranch($branchReference); 
     } 
    } 
    return $instance; 
} 

he añadido el ejemplo de mi blog: http://blog.webdevilopers.net/populate-resp-set-default-values-on-form-resp-object-or-instance-in-sonataadminbundle/

+0

¿Y qué pasa si ese 11 no se puede codificar? – aderuwe

+0

¿Dónde estaría el identificador resp. "11" vienen? – webDEVILopers

+0

Sí, mi pregunta es exactamente. – aderuwe

0

Para booleanos, otra opción es establecer un valor data dentro de la primera matriz pasada a su método de add , en el interior de configureFormFields

Así que después de algún memtoring, mi código (para una casilla de verificación que quería tener activada por defecto) terminó buscando algo como esto:

protected function configureFormFields(FormMapper $formMapper) 
{ 
    $formMapper 
     ->add('name') 
     ->add('visible', null, ['label'=>'Visibility', 'data' => true ]) 
    ; 
} 

... que salvó algunas líneas en la parte superior de mi archivo, ya que podía deshacerme de la definición getNewInstance().

Cuestiones relacionadas