niestety znów framework ze mną wygrywa:
1. obecnie mam błąd do rozwiązania z datą podczas zapisu:
użytkownik dodaje post i ma zawartość dodać do bazy danych:
błąd:
FatalErrorException in DateTimeType.php line 53: Error: Call to a member function format() on a non-object
controller:
public function showTopicAction($id, Request $request) { // get post for selected topic from db $postsList = $this->getDoctrine()->getRepository('UserBundle:Posts')->getPostsWithTopicId($id); //change date format $postsList[$i][0]->setAddedDate($postsList[$i][0]->getAddedDate()->format('Y-m-d H:i:s')); $gettedDate = $postsList[$i][0]->getLastEditionDate(); if($gettedDate != null){ $postsList[$i][0]->setLastEditionDate($gettedDate->format('Y-m-d H:i:s')); } } //get user id $user = $this->getUser(); $userId = ($user !== null) ? $user->getId() : 0; //prepare edit form $postEnt = new Posts; $editForm = $this->createForm(EditPostType::class, $postEnt); //prepare add post form $addPostForm = $this->createForm(AddPostType::class, $postEnt); $addPostForm->handleRequest($request); //after submit prepare data and save into DB if ($addPostForm->isSubmitted() && $addPostForm->isValid()) { $em = $this->getDoctrine()->getManager(); $user = new User; $user->setId($userId); $postEnt->setPostAuthor($user); $topic = new Topics; $topic->setId($id); $postEnt->setTopic($topic); $postEnt->setAddedDate(new \DateTime()); // $postEnt->setLastEditionDate(new \DateTime()); \Doctrine\Common\Util\Debug::dump($postEnt); $em->merge($postEnt); $em->flush(); } return $this->render( 'UserBundle:Topic:showTopic.html.twig', 'postsData' => $postsList, 'userId' => $userId, 'editForm' => $editForm->createView(), 'addPostForm' => $addPostForm->createView(), ) ); }
dump wypluwa:
http://thegeniesis.kylos.pl/sf/err1/dump.html
Rozumiem, że pluje się o format daty, jednakże jest deklarowany dla AddedDate - gdzie jeszcze powinienem (lastEditionDate gdy deklaruję to nic nie zmienia)?
2. Pytanie odnośnie edycji
w kontrolerze pobieram dane, chcę tylko dla użytkowników, którzy stworzyli post dać edycję (ukryty div z formularzem, po naciśnięciu przycisku zmienia się display),
tutaj mam problem z wybraniem najlepszej drogi użycia generatora formularzy:
jedna z tych co przychodzi mi do głowy (choć wydaje się trochę przerostem formy):
tworzę pętlę lecącą po wynikach z bazy danych, przy każdym przejściu zostaje wywołana metoda createForm, gdzie argumentem jest aktualny elem. pętli, wynik ten zapisywany jest do tablicy, całość zostaje przekazana do html.twig i tam przy odpowiednich warunkach pętlami wyświetlam formularz z danymi
druga w której rezygnuje z generatora (choć chyba wszystkie formularze powinny być przez niego tworzone):
tworzę w html.twig ręcznie pole textarea (tylko tyle potrzeba w tym wypadku) i podczas generowania widoku postów wklejam tam zawartość i wszystko ładnie podmienione
Później ten formularz zamierzam po przez AJAX wysyłać i nadpisywać edytowaną treść.
Czy możecie doradzić jak najlepiej rozwiązać ten problem (dane już są pobierane [zapytanie, które jest potrzebne do wyświetlania treści bez edycji ])?
Obecny widok html.twig (wiem, nie jestem front-end'owcem):
{% extends 'base.html.twig' %} {% block title %}{% trans %}title.forum{% endtrans %}{% endblock %} {% block body %} <section class="container posts"> {% set loopIndex = 0 %} {% for data in postsData %} <section class="post-box"> <section class="user-data-topic col-md-2"> userporfile data username: {{ data.username }} </section> <section class="col-md-10 post-section"> <div class="row"> <header class="col-md-12"> <div class="col-md-7"> nr {{ loopIndex }} </div> <div class="col-md-4"> {% trans %} post.date{% endtrans %}: {{ data.0.addedDate }} </div> <div class="col-md-1"> {% if userId == data.0.postAuthorId %} {% endif %} </div> </header> <article> {{ data.0.postText }} <br /> {% if data.0.lastEditionDate != '' %} {% endif %} </article> {% if userId == data.0.postAuthorId %} <div class="editBox " style="display:none"> {{ form_start(editForm) }} <div class="form-group"> {{ form_label(editForm.postText) }} {{ form_errors(editForm.postText) }} {{ form_widget(editForm.postText) }} </div> <div class=""> </div> {{ form_end(editForm) }} </div> {% endif %} <footer> ---<br /> user_desc </footer> </div> </section> </section> {% set loopIndex=loopIndex+1 %} {% endfor %} {% if userId != '' %} <section class="col-md-2"> </section> <section class="col-md-10"> {{ form_start(addPostForm) }} {{ form_label(addPostForm.postText) }} {{ form_errors(addPostForm.postText) }} {{ form_widget(addPostForm.postText) }} <div class=""> </div> {{ form_end(addPostForm) }} </section> {% endif %} </section> {% endblock %}