Diskuze: Dynamicky vytvaře ne formuláře
Člen
Zobrazeno 12 zpráv z 12.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
zdar,
můžeš tam předávat jen tu jednu hodnotu, pokud vim. Ve tvém případě by
asi bylo lepší vytvořit si doslova komponentu, které to pak nacpeš do
render() metody.
Díky jsem s nette v začátcích a tak nějak nechápu co tím myslíš
Asi něco takovýho (psáno z hlavy)
class GalleryFormControl extends Nette\Application\UI\Control
{
public function render($imageId, $title)
{
$this["galleryForm"]->setDefaults(array(
"gallery_image_id" => $imageId,
"title" => $title
));
$this->template->setFile("default.latte");
$this->template->render();
}
public function createComponentGalleryForm()
{
$form = new Form();
$form->addText("title", "Title:")
->setRequired();
$form->addHidden("gallery_image_id");
$form->addSubmit("send", "Uložit");
$form->onSuccess[] = array($this, "galleryFormSubmitted");
return $form;
}
public function galleryFormSubmitted(Form $form, $values)
{
// your logic
}
}
V šabloně by ti pak mělo stačit jen to vykreslit
{control galleryFormControl $image->id, $image->title}
V presenteru si to zaregistruješ stejně jako klasický formulář
public function createComponentGalleryFormControl()
{
return new GalleryFormControl();
}
můžu tě poprosit ještě o tu šablonu
$this->template->setFile("default.latte");
mě se tam ten formulář nedaří vykresli
{control galleryFormControl $image->id, $image->title}
tohle by mělo stačit. Případně si to můžeš vykreslit manuálně jak chceš (pomocí maker {form}, {input} a {label}, nebo úplně ručně přes n:name atributy).
ještě je tam problem s gallery managerem
GalleryFormControl.php
public function galleryFormSubmitted(Form $form, $values) {
$galleryManager = new GalleryManager();
$this->galleryManager->saveImageTitle($values);
$this->redirect('this');
}
Argument 1 passed to App\Model\BaseManager::__construct() must be an instance of Nette\Database\Context, none given, called in D:\work\galery\app\CoreModule\Form\GalleryFormControl.php on line 37 and defined
BaseManager.php
abstract class BaseManager extends Object {
protected $database;
public function __construct(Context $database) {
$this->database = $database;
}
}
Tak to pak budeš muset řešit přes továrny, které tu závislost té komponentě automaticky předají.
class GalleryFormControlFactory
{
private $galleryManager;
public function __construct(GalleryManager $galleryManager)
{
$this->galleryManager = $galleryManager;
}
public function create()
{
return new GalleryFormControl($this->galleryManager);
}
}
tu továrnu si zaregistruješ v configu
- Tvuj\Namespace\GalleryFormControlFactory
v presenteru si to pak injectneš automaticky
/**
* @var Tvuj\Namespace\GalleryFormControlFactory
* @inject
*/
public $galleryFormControlFactory;
public function createComponentGalleryFormControl()
{
return $this->galleryFormControlFactory->create();
}
v té komponentě pak dostaneš ten GalleryManager přes konstruktor, uložíš do privátní proměnné a v galleryFormSubmitted() budeš moct použít $this->galleryManager
Zobrazeno 12 zpráv z 12.