• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Symfony - Jak automatycznie zapisać datę wykonania wpisu

0 głosów
481 wizyt
pytanie zadane 26 sierpnia 2018 w PHP przez wanderer Gaduła (3,710 p.)
Cześć,
jak automatycznie zapisać datę wykonania wpisu mając taki bardzo prosty przykładowy formularzyk do wpisów:
>Tytuł
>Opis
>Autor
[wyslij]

2 odpowiedzi

0 głosów
odpowiedź 26 sierpnia 2018 przez KariK-02 Mądrala (6,030 p.)

No to tak:

W modelu dodajesz takie coś:

/**
 * @ORM\Column(type="datetime")
*/
protected $dateTime;

public function setDataTime(\DateTime $dt) ...
to podobnie z getterem

A w kontrolerze przy tworzenia obiektu to po prostu podajesz 

$dataTime = new \DateTIme('now');

w setterze do instancji 

1
komentarz 26 sierpnia 2018 przez wanderer Gaduła (3,710 p.)

EDIT:

Zrobiłem i działa, poniżej daje kod:

 

<?php

namespace AppBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\DateType;

class BlogType extends AbstractType
{
    /**
     * {@inheritdoc}
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
        
        $builder
            ->add('title', TextType::class, array('label'=>false,
            'attr' => array('class' => 'form-control', 'placeholder'=>'Title'),
            )) 
            ->add('description', TextareaType::class, array('label'=>false,
            'attr' => array('class' => 'form-control','placeholder'=> 'Description'),
            ))
            ->add('author', TextType::class, array('label'=>false,
            'attr' => array('class' => 'form-control','placeholder' => 'Author name'),
            ))
            ->add('date', DateType::class, array('data' => new \DateTime("now")))
            
            ;
        
    
    }/**
     * {@inheritdoc}
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\Blog'
        ));
    }

    /**
     * {@inheritdoc}
     */
    public function getBlockPrefix()
    {
        return 'appbundle_blog';
    }


}

 

komentarz 26 sierpnia 2018 przez KariK-02 Mądrala (6,030 p.)
Tak też można +1
komentarz 26 sierpnia 2018 przez wanderer Gaduła (3,710 p.)

@KariK-02,
 Data ustawia się w liscie rozwijanej z wyborem daty jako aktualna i to jest Ok.  A czy da się jakoś wyłączyć wyświetlanie pola nie na zasadzie display:none, tylko jakos w atrybucie.
Wiem, że da się zrobić 'label' => false co wyłącza nazwe pola, a czy tak samo sie da zrobic ale z całym polem?

komentarz 26 sierpnia 2018 przez KariK-02 Mądrala (6,030 p.)

Znaczy ja to robie tak w twigu:

{{ form_start(form) }}
{{ form_row(form.i_tu_nazwa_pola) }}
{{ form_end(form, {'render_rest': false}) }}

 

1
komentarz 26 sierpnia 2018 przez Bosswell Nałogowiec (36,470 p.)

Ten sposób z form builderem nie jest zbyt dobry. Po co przy formularzu pokazywać datę? No chyba, że jakoś byś ja ukrył. Lepiej zrobić to tak jak napisał KariK-02 . A jeszcze lepiej, jeżeli zmienną z datą będziesz inicjował w konstruktorze modelu. Wtedy pozbędziesz się niepotrzebnego kodu z kontrolera.

komentarz 26 sierpnia 2018 przez wanderer Gaduła (3,710 p.)

Ok powiem tak.  Zrobiłem to tak jak umiałem biorąc też Wasze wskazówki pod uwagę. Na prawdę wolę to zrobić trochę gorzej niż się zatrzymac i zniechęcic albo ściągnąc z neta.
Podpinam kod.
Zrobiłem ukrywając dane pole.
 

public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
        
        $builder
            ->add('title', TextType::class, array('label'=>false,
            'attr' => array('class' => 'form-control', 'placeholder'=>'Title'),
            )) 
            ->add('description', TextareaType::class, array('label'=>false,
            'attr' => array('class' => 'form-control','placeholder'=> 'Description'),
            ))
            ->add('author', TextType::class, array('label'=>false,
            'attr' => array('class' => 'form-control','placeholder' => 'Author name'),
            ))
            ->add('date', DateType::class, array(
            'label'=>'Aktualna data publikacji','data' => new \DateTime("now"),'attr' => array('hidden' => true,)))
            ;
        
    }

Moglibyście mi też bardziej w sumie wytłumaczyć ten lepszy sposób ? Póki co mam tak

komentarz 26 sierpnia 2018 przez Bosswell Nałogowiec (36,470 p.)

Z metody buildForm pozbąć się

->add('date', DateType::class, array(
            'label'=>'Aktualna data publikacji','data' => new \DateTime("now"),'attr' => array('hidden' => true,))

W encji "Blog", zakładam że tak się nazywa, dodaj poniższe linie kodu

     /**
     * @var \DateTime
     *
     * @ORM\Column(name="created_at", type="datetime")
     */

    private $createdAt;

    public function __construct()
    {
        $this->createdAt = new \DateTime('now');
    }

W metodzie kontrolera użyj formBuildera

$blog = new Blog();
$form = $this->createForm(BlogType::class, $blog);

I prześlij go jako parametr metody render ($this->render('plik', 'form' => $form->createView()))

Teraz w twigu utwórz ten formularz

{{ form_start(form) }}

        {{ form_widget(form) }}

        <button class="btn btn-success">Dodaj</button>

{{ form_end(form) }}

 

komentarz 27 sierpnia 2018 przez Ehlert Ekspert (215,070 p.)
Bosswell, Doctrine nie korzysta z konstruktorów przy tworzeniu obiektu encji.
0 głosów
odpowiedź 26 sierpnia 2018 przez Ehlert Ekspert (215,070 p.)
komentarz 26 sierpnia 2018 przez Ehlert Ekspert (215,070 p.)
Polecam w razie potrzeby wyseparować to rozwiązanie do klasy/traita.

Podobne pytania

0 głosów
2 odpowiedzi 295 wizyt
pytanie zadane 26 sierpnia 2018 w PHP przez wanderer Gaduła (3,710 p.)
+1 głos
1 odpowiedź 835 wizyt
0 głosów
1 odpowiedź 435 wizyt
pytanie zadane 31 października 2017 w Rozwój zawodowy, nauka, praca przez Kamil Gąsior Obywatel (1,430 p.)

93,631 zapytań

142,556 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2523p. - Maurycy W
  9. 2459p. - CC PL
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1851p. - Mariusz Fornal
  13. 1811p. - rafalszastok
  14. 1600p. - Rafał Trójniak
  15. 1588p. - Tomasz Bielak
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...