• 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

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
253 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 (214,270 p.)
Bosswell, Doctrine nie korzysta z konstruktorów przy tworzeniu obiektu encji.
0 głosów
odpowiedź 26 sierpnia 2018 przez Ehlert Ekspert (214,270 p.)
komentarz 26 sierpnia 2018 przez Ehlert Ekspert (214,270 p.)
Polecam w razie potrzeby wyseparować to rozwiązanie do klasy/traita.

Podobne pytania

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

93,103 zapytań

142,076 odpowiedzi

321,560 komentarzy

62,444 pasjonatów

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...