Komponenta – formular nevykona metodu – asi zly inject
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Creator13
- Člen | 18
Mam vytvorenu komponentu kontaktneho formularu. Vsetko sa mi vykresli, len sa nevykona metoda sendContactEmail. Pravdepodobne kvoli nespravnemu injectu. Popripade potrebujem $contactFacade nejak v presenteri nastavit, ale neviem ako…
Komponenta:
use Nette\Application\UI,
Nette\Forms\Form;
class ContactControl extends UI\Control
{
/** @var Model\ContactFacade @inject */
private $contactFacade;
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/templates/ContactFormControl.latte');
$template->render();
}
protected function createComponentContact()
{
$form = new UI\Form;
$form->addText('meno', 'Meno')
->setRequired('Musíte vyplniť meno');
$form->addText('email', 'Email')
->addRule(Form::EMAIL, 'Emailová adresa nie je v správnom tvare')
->setRequired('Musíte vyplniť email');
$form->addTextArea('sprava', 'Správa')
->setRequired('Správa musí byť vyplnená');
$form->addTextArea('antispam', '2+1')
->setRequired('Nevyplnili ste antispam')
->addRule(Form::EQUAL, 'Zle vyplnený antispam', 3);
$form->addSubmit('send', 'Odoslať')
->setAttribute('class','hladat');
$form->onSuccess[] = [$this, 'successContact'];
return $form;
}
function successContact(UI\Form $form)
{
$vals = $form->values;
$this->contactFacade->sendContactEmail($vals->email, '$vals->emailik', 'Kontaktný formulár', $vals->sprava);
$this->flashMessage('Vaša správa bola odoslaná');
$this->redirect('this');
}
}
Presenter:
function actionContact()
{
$control = $this->getComponent('contact');
}
protected function createComponentContact() {
$control = new \ContactControl();
return $control;
}
- Pavel Kravčík
- Člen | 1196
/** @var Model\ContactFacade @inject */
private $contactFacade;
- Neměl bys používat anotační inject v komponentě
- A když ho používáš, proměnná musí být public
Injectni to tam přes constructor.
- petr.jirous
- Člen | 128
udělej si továrničku
class ContactControl extends UI\Control
{
/** @var Model\ContactFacade */
protected $contactFacade;
public function __construct(Model\ContactFacade $contactFacade)
{
$this->contactFacade = $contactFacade;
}
}
interface IContactControlFactory
{
/** @return ContactControl */
public function create();
}
Editoval petr.jirous (4. 2. 2015 14:26)