Volani komponenty v presenteru (render) – znovupouziti formulare
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Muhahe
- Člen | 79
Rád bych použil jeden a ten samý formulář pro vytváření a zároveň editaci. Je možné přidat komponentu již v presenteru v metodě render?
Mám render pro formulář, který by sloužil k vytváření
<?php
public function renderNewProject() {
$control = $this->createComponentNewProjectForm();
$this->addComponent($control,'newProject');
}
?>
Druhý render, který by sloužil k editaci
<?php
public function renderEditProject() {
$control = $this->createComponentNewProjectForm();
$this->addComponent($control,'editProject');
}
?>
a samotne createComponent
<?php
protected function createComponentNewProjectForm() {
$assign = $this->makePairs($this->uzivateleRepository->findAllNoViewUsers());
$view = $this->makePairs($this->uzivateleRepository->findAllViewOnlyUsers());
$validDate = function($field,$startField) {
return $field->value >= $startField->value;
};
$form = new Form;
$form->addText('projectId', 'Project ID', 40, 100)
->addRule(Form::FILLED, "Project ID must be filled.");
$form->addText('customer', 'Customer', 40, 100);
$form->addText('platform', 'Platform', 40, 100);
$form->addText('product', 'Product', 40, 100);
$form->addText('link', 'Link', 40, 100);
$form->addText('priority', 'Priority', 2, 2)
->setType('number')
->setDefaultValue(0)
->addRule(Form::RANGE, 'Priority must be from %d to %d', array(0, 99));
$form->addSelect('assign', 'Assign', $assign)
->setPrompt('none');
$form->addSelect('view', 'Viewer', $view)
->setPrompt('none');
$start = $form->addDate('start', 'Start', Vodacek\Forms\Controls\DateInput::TYPE_DATE)
->setDefaultValue(new DateTime());
$form->addDate('end', 'End', Vodacek\Forms\Controls\DateInput::TYPE_DATE)
->setDefaultValue(new DateTime())
->addRule($validDate,'Start date must be before end date.',$start);
$form->addTextArea('description', 'Description', 60, 20);
$form->addHidden('leader')
->setDefaultValue($this->user->id);
$form->addSubmit('create', 'Create new project');
// $form->onSuccess[] = $this->createNewProject($form);
$form->onSuccess[] = callback($this, 'createNewProject');
return $form;
}
?>
Do metod render bych dále doplnil data na předvyplnění hodnot a kde by se měl formulář zpracovat. Mám však problém, že se formulář na následné stránce nezobrazí. Laděnka žádnou chybu nehází. Je možné postupovat tímto způsobem?
Editoval Muhahe (17. 9. 2013 9:00)