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
+
0
-

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)

enumag
Člen | 2118
+
0
-

Samozřejmě, jen nesmíš zapomenout tu komponentu vykreslit v obou view (newProject.latte a editProject.latte) – hádám že proto se nezobrazí. Také callback onSuccess asi nebudeš nastavovat v továrničce ale v action.