• 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

Object Storage Arubacloud
0 głosów
208 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 (212,670 p.)
Bosswell, Doctrine nie korzysta z konstruktorów przy tworzeniu obiektu encji.
0 głosów
odpowiedź 26 sierpnia 2018 przez Ehlert Ekspert (212,670 p.)
komentarz 26 sierpnia 2018 przez Ehlert Ekspert (212,670 p.)
Polecam w razie potrzeby wyseparować to rozwiązanie do klasy/traita.

Podobne pytania

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

92,568 zapytań

141,420 odpowiedzi

319,623 komentarzy

61,956 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...