Kdyby\DoctrineForms – jak sprovoznit a správně používat?
- Jan Mikeš
- Člen | 771
Ahoj, po instalaci
fprochazka/kdyby-doctrine-forms-testing-sandbox
se zobrazuje
hláška:
To make this work, add to TextControl::save()
this piece of code:
$component->loadHttpData();
. Otherwise sent values are not
loaded to entity.
Po přidání opravdu vše funguje tak jak má a do entity se uloží data zaslaná formulářem.
Zajímá mě ale, jestli se dají DoctrineForms využívat i bez této
drobné úpravy v originálním balíčku, nebo jak správně používat
DoctrineForms, aby se odeslaná data uložila do entity a následně stačilo
jen přes em->persistent();
entitu uložit.
V sandboxu jsem neměnil vůbec nic a očekával jsem funkční ukázku, abych DoctrineForms mohl využívat ve své aplikaci.
Pokud máte někdo funkční ukázky budu za ně rád.
- Jan Mikeš
- Člen | 771
Také by mě zajímal best practise pro flushování, momentálně mám
takto:
Presenter:
protected function createComponentArticleForm(\App\Components\ArticleForm\IControlFactory $factory)
{
$control = $factory->create();
$control["form"]->onSuccess[] = function($form) {
$this->entityManager->flush();
};
return $control;
}
Control.php:
public function processForm(EntityForm $form)
{
$this->articles->publish($form->getEntity());
}
Je to vhodné řešení? Nebo $em->flush
přesunout přímo
do komponenty, nebo to umístit do mé metody publish():
public function publish(Article $article)
{
$this->em->persist($article);
}
S Kdyby\Doctrine i Doctrine všeobecně teprve začínám, tak budu rád za jakékoliv rady pro začátečníky.
- Jiří Nápravník
- Člen | 710
S DoctrineForms neporadim, ale flushovani podle me patri do modelovych trid, nejake facady. EntityManager je v podstate soucast modelu a tak by nemela byt v komponente, nebo uz vubec v presenteru.
Já mám na tohle takovou jednoduchou radu. Představ si, že vyměníš prohlížeč a budeš chtit ovladat tvoji aplikaci třeba přes mobilní aplikaci a publikovat články tam. Tak pošleš požadavek na a když to budeš mít v modelu, tak jen zavoláš $this->articles->publish(). Takhle bys musel hlídat flushování jak v mobilní aplikaci (resp. v nějakém rozhraní, co přijímá ty požadavky z ní), tak v presenteru a to je přece jen trochu zbytečné.
- Jan Mikeš
- Člen | 771
Moje třída Articles
je pouze kopie toho co je uvedeno v dokumentaci
kde je napsáno
don't forget to call $em->flush() in your presenter
, takže jsem
nevěděl co je best practise.
- petr.pavel
- Člen | 535
Flushování: já mám listener na Application::onError
a
Application::onShutdown
. Když se spustí onError, nastavím si
praporek a později v onShutdown buď flusnu nebo ne.
Příklad pro DoctrineForms by mě taky zajímal. Louskal jsem testy, ale i tak si nejsem jistý, že jsem to všechno správně pochopil. Taky by mě zajímalo, v jakém ohledu jsou „experimentální“. Tj. co v nich teda ještě nefunguje.
- petr.pavel
- Člen | 535
@Lexi, jestli tě to ještě pálí, zkus https://help.kdyby.org/topics/?…
Zatím tam nic není, tak třeba rozproudíš debatu.