es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Eres un traductor español que traduce documentos de TI. Traduce lo siguiente al español. Fecha opcional en forma

Quiero agregar una clase opcional DateType en el formulario de Symfony. Funciona más o menos porque puedo enviar el formulario sin establecer la fecha, pero se establece automáticamente en la fecha de hoy.

TodoType.php

public function buildForm(FormBuilderInterface $builder, array $options): void
{
    $builder
        ->add('name')
        ->add('Deadline', DateType::class, [
            'widget' => 'single_text',
            'required' => false,
            'empty_data' => ''
        ])
        ->add('Submit', SubmitType::class)
    ;
}

entidades de plazo

/**
* @ORM\Column(type="date", nullable=true)
*/
private $deadline;

...

public function getDeadline(): ?\DateTimeInterface
{
    return $this->deadline;
}

public function setDeadline(\DateTimeInterface $deadline = null): self
{
    $this->deadline = $deadline;
    return $this;
}

TodoController.php

/**
 * @Route("/todos", methods={"GET", "POST"}, name="todos")
 * 
 */
public function todos(EntityManagerInterface $entityManager, Request $request): Response
{

// Renderizando todos
$todos = $entityManager->getRepository(Todo::class)
    ->findBy(
        ['owner' => $this->getUser()]
    );


// Creando nuevo TODO
$todo = new Todo();

$todo
    ->setOwner($this->getUser())
    ->setCreationDate(new \DateTime());
$form = $this->createForm(TodoType::class, $todo);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
    $entityManager->persist($todo);
    $entityManager->flush();

    return $this->redirectToRoute('todos');
} 


return $this->render('todo/todos.html.twig', [
    'todos' => $todos,
    'form' => $form->createView(),
]);
}

Para renderizar en .twig, solo utilicé {{ form(form) }}, aún no lo he personalizado.

Editar: falta el código.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para hacer que el campo DateType sea opcional en un formulario de Symfony y al mismo tiempo evitar que se establezca automáticamente en la fecha de hoy, debes modificar el campo Deadline en tu archivo TodoType.php.

    public function buildForm(FormBuilderInterface $builder, array $options): void
    {
        $builder
            ->add('name')
            ->add('Deadline', DateType::class, [
                'widget' => 'single_text',
                'required' => false, // Hacer el campo opcional
                'empty_data' => null, // Establecer los datos vacíos como nulos
                'data' => null // Establecer los datos como nulos
            ])
            ->add('Submit', SubmitType::class);
    }
    

    Necesitas establecer 'empty_data' en null para evitar que el campo se autocomplete con la fecha de hoy, y también establecer 'data' en null para hacerlo opcional. El campo 'required' ya está establecido en false, lo que lo hace opcional, por lo que no tienes que modificarlo.

    Además, en tu archivo controlador TodoController.php, debes modificar la función setCreationDate para establecer la fecha límite como null cuando no se establezca.

    $todo
        ->setOwner($this->getUser())
        ->setCreationDate(new \DateTime())
        ->setDeadline(null); // Agrega esta línea
    

    Esto evitará que la fecha límite se establezca automáticamente en la fecha de hoy cuando se crea un nuevo objeto Todo.

    Después de realizar estos cambios, el campo DateType en tu formulario será opcional y no se establecerá automáticamente en la fecha de hoy.

Comments are closed.