Předání dat z Presenteru do Modelu, vytvoření formuláře
- Johnczek
- Člen | 37
Zdravím, řeším v Nette tento problém. Mám presenter DetailPresenter reprezentující detail produktu, vypadá takto
<?php
namespace App\Presenters;
use App\Model\ProductDetail;
use Nette;
class DetailPresenter extends BasePresenter {
private $database;
private $user;
private $id;
public function __construct(Nette\Database\Context $database, \Nette\Security\User $user) {
$this->database = $database;
$this->user = $user;
}
public function renderDefault($id) {
$this->id = $id;
$this->template->product = new ProductDetail($this->database, $id);
$this->template->userId = $this->user->getId();
}
}
Objekt ProductDetail který vytvořím v sobě uchovává všechny informace
(od obecných informací až po pole objektů Recenze).
Potřeboval bych na detailu produktu pod výpisem recenzí (což už mám
hotové, objekt Recenze obshauje mimo jiné id uživatele který ji napsal, text
a id produktu, ke kterému patří) zobrazit formulář vložení/update
recenze. Pokud uživatel na daný produkt napsal recenzi, zobrazí se
ve value formuláře daný text a dané hodnocení které může updatovat.
Pokud žádnou recenzi nenapsal, zobrazí se prázdný formulář
s textfieldem, selectorem hodnocení a submitem.
Zkoušel jsem to nějak udělat přes továrnu, tam jsem ale nějak nemohl
dostat ID detailu protože jsem nemohl k objektu ProductDetail přistoupit
například přes
$this->template->product
Dále pak bojuji s nějakým layoutem formulářů.
A otázky:
1. Jaké řešení by bylo pro tuhle situaci nejlepší? (Pro vložení
recenze je třeba id_produktu (dá se získat s ProductDetail objektu),
id_uživatele (to se dá, řpedokládám zjistit z usera), text recenze a
hodnocení. Jako řešení mě napadla nějaká form factory která by podle
toho co vrátí např metoda hasUserReview() vykreslila prázdný nebo
vyplněný formulář. Ale nejsem si s form factory a formulářema v nette
obecně moc jistý, proto prosím o radu.
2.Lze nějak snadno upravit formulář dle mých představ? (Obalit například
2 inputy do jednoho divu, přidat inputu classu a tak dále?)
Děkuji