Korektní přístup k databázi z továrničky?
- HonDem
- Člen | 30
Čau. Potřebuju mít z továrničky přístup k databázi (a nebude to potřebovat jenom jedna továrnička). Chtěl jsem se zeptat, jaké řešení považujete za korektnější?
- Vytvořit BaseFormFactory.php, ve kterém pomocí DI vytvořit objekt databáze a následně ostatní továrničky dědit
- Odkazovat továrničku na metody modelů
- nebo máte ještě nějaké lepší, vychytralejší řešení?
- Pavel Kravčík
- Člen | 1196
Ano, tohle řešení používám také. Komponenta nemusí nic řešit. Je lepší, než si předávat databázi a tu logiku tvořit uvnitř komponenty.
Injectnu si VozidloModel a v komponentě (třeba v success metodě formuláře) používám už jen její metody jako save().
- Tomáš Votruba
- Moderator | 1114
Mohl bys doplnit zdroják s komenty, co kde potřebuješ? Možná to jde řešit lépe a snadněji.
- HonDem
- Člen | 30
Samozřejmě. Řekněme, že mám továrničku EditPageFormFactory, která si má z databáze vytáhnout libovolný obsah stránky má umožnit jeho editaci.
class EditPageFormFactory extends BaseFormFactory
{
private $editModel;
private $pageId;
public function __construct(EditModel $editModel)
{
$this->editModel = $editModel;
}
/**
* @return Form
*/
public function create($pageId)
{
$this->pageId = $pageId;
$form = new Form;
$form->addTextArea('content', 'Obsah stránky:');
$form->addSubmit('send', 'Uložit');
$form->setDefaults($this->editModel->getPage($pageId));
$form->onSuccess[] = array($this, 'formSucceeded');
return $form;
}
public function formSucceeded(Form $form, $values)
{
try{
//tady potřebuji editovat obsah stránky
$this->editModel->editPage($this->pageId, $values);
} catch (Nette\Neon\Exception $e){
$form->addError($e->getMessage());
}
}
}
- tady v callbacku používám metody editModelu.
Napadá tě tedy nějaké lepší řešení?
Editoval HonDem (23. 7. 2015 12:21)
- Pavel Kravčík
- Člen | 1196
Ten $pageId si můžeš nastavit v setDefaults a poslat si ho v hidden inputu a nemusíš si vytvářet proměnnou pro třídu, možná to oceníš, až budeš používat EditPageModel jinde. Protože Tě to bude nutit dokola rozsekávat data a ID.