Kdyby\DoctrineForms – jak sprovoznit a správně používat?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Jan Mikeš
Člen | 771
+
0
-

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
+
0
-

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
+
0
-

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
+
0
-

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.

Jan Mikeš
Člen | 771
+
0
-

Vážně nikdo neví? Stačí živá ukázka ve vaší aplikace pro inspiraci.
Bez přidání $component->loadHttpData(); do TextControl $form->getValues() vrací NULL

petr.pavel
Člen | 535
+
0
-

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
+
0
-

@Lexi, jestli tě to ještě pálí, zkus https://help.kdyby.org/topics/?…
Zatím tam nic není, tak třeba rozproudíš debatu.

Tomáš Votruba
Moderator | 1114
+
+1
-