Neproběhně odeslání formuláře v komponentě
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Domki
- Člen | 310
Mám komponentu v které vytvářím formulář který vykreslím. Danou komponentu přídam do presenteru
protected function createComponentAddEditBrand()
{
$result = $this->addEditBrandFormFactory->create(NULL);
return $result;
}
Kod komponenty:
class AddEditBrandForm extends Control
{
private $brandId = NULL;
private $brandsRepository = NULL;
/**
* @param int|NULL $brandId
* @param BrandsRepository $brandsRepository
*/
public function __construct($brandId, BrandsRepository $brandsRepository)
{
parent::__construct();
$this->brandId = $brandId;
$this->brandsRepository = $brandsRepository;
}
public function createComponentAddEditBrandForm() {
$form = new \Nette\Application\UI\Form();
$form->addHidden('id', $this->brandId);
$form->addText('name', 'Značka:')->addRule(Form::FILLED, 'Pole "Značka" je poviné.');
$form->addTextArea('description', 'Popis');
$form->addSubmit('save', 'Uložit')->controlPrototype->addClass('btn btn-primary');
$form->onValidate[] = [$this, 'validateUniqueNameForm'];
$form->onSuccess[] = [$this, 'addEditBrandFormSucceeded'];
return $form;
}
public function addEditBrandFormSucceeded(\Nette\Application\UI\Form $form)
{
Debugger::fireLog("sdf");
$values = $form->values;
try {
if (!isset($values->id)) {
/**@var Brand $brand * */
$brand = $this->brandsRepository->createEntity();
$brand->name = $values->name;
$brand->description = $values->description;
$this->brandsRepository->persist($brand);
$this->presenter->flashMessage('značka pridana', 'success');
} else {
// Update
}
$this->presenter->redirect('Brand:');
}catch (UniqueConstraintViolationException $e) {
$form['name']->addError('Název značky "'.$values->name.'" již existuje. Zadejte prosím jiný název.');
}
}
public function validateUniqueNameForm(\Nette\Application\UI\Form $form)
{
$values = $form->getValues();
$brands = $this->brandsRepository->findBy(['name' => $values->name]);
if (count($brands) > 0) {
$form['name']->addError('Název značky "'.$values->name.'" již existuje. Zadejte prosím jiný název.');
}
}
public function render()
{
$template = $this->template;
$template->setFile(__DIR__ . '/AddEditBrandForm.latte');
$template->render();
}
}
Když odešlu formulář tak se mi načte stránka znovu ale firelog
v metodě addEditBrandFormSucceeded se vůbec neprovede. Kde je problém?
Díky