Ako odovzdat komponent druhej komponente?
- steelbull
- Člen | 241
Mam komponentu modal, ktora je potomkom UI\Control a maly formular, ktory je tiez potomkom UI\Control; Dalej mam velky hlavny formular, ktory je taktiez potomkom UI\Control.
V hlavnom formulari by som chcel vytvorit instanciu komponenty modal, ktorej by som chcel setterom odovzdat instanciu maleho formulara alebo prip. aj inej komponenty. A v modali by som chcel tuto komponentu vykreslit. Ale neviem ako :-(
<?php
namespace Test\Components;
use Nette\Application\UI\Control;
class ModalControl extends Control
{
private $title = '';
private $body = '';
private $footer = '';
private $control;
private $name;
/**
* Constructor
*/
public function __construct() {
$this->name = $this->getName();
}
/**
* Set control
*
* @param $control
*/
public function setControl($control) {
// Tu neviem, co s tym, ziskam instanciu UI\Control (napr. formular)
// a dalej neviem, ako ju pouzit/vykreslit...
$this->control = $control;
}
/**
* Set title
*
* @param $title
*/
public function setTitle($title)
{
$this->title = $title;
}
/**
* Set body
*
* @param $body
*/
public function setBody($body) {
$this->body = $body;
}
/**
* Set footer
*
* @param $footer
*/
public function setFooter($footer) {
$this->footer = $footer;
}
/**
* Render component
*/
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/Modal.latte');
$template->title = $this->title;
$template->body = $this->body;
$template->footer = $this->footer;
$template->name = $this->name;
$template->render();
}
}
- Martk
- Člen | 661
Smazal bych prvně tuto část kódu:
private $name;
/**
* Constructor
*/
public function __construct() {
$this->name = $this->getName();
}
$this->name bude vždy hodnota null;
protected function createComponentControl() {
return $this->control; // Nesmí se předávat již připojená komponenta
}
{control control}
- steelbull
- Člen | 241
Dakujem @Antik, ano $name vrati vzdy null. Ako inak ziskam nazov komponenty?
A toto je ok alebo bad practise:
/**
* Render component
*/
public function render()
{
$this->addComponent($this->control, 'pokus');
$template = $this->template;
$template->setFile(__DIR__ . '/Modal.latte');
$template->title = $this->title;
$template->body = $this->body;
$template->footer = $this->footer;
$template->name = $this->name;
$template->render();
}
- Martk
- Člen | 661
@steelbull Jestli nemáš žádnou proměnou $this->name ve
třídě, tak pak je to v pořádku, tzn. že se zavolá getter
$this->getName()
(https://api.nette.org/…ent.php.html#…),
který vrátí jméno komponenty (Když není připojená vrátí null), přes
Nette\Object.
Jestli máš na mysli takovéto připojení ke komponentě, tak ano, je to v pořádku.