Formulář na basePresenter – odkazování na jiný presenter
- Rudolf247
- Člen | 38
Dobrý den, potřebuji udělat jednoduchou věc.
Mám formulář na basePresenteru, který se vykresluje na layoutu, ale po jeho
odeslání potřebuji přistoupit na jiný presenter respektive i na jinou
šablonu.
Tak jsem bádal a dospěl jsem k tomu, že potřebuji vytvořit komponentu, postupoval jsem podle návodu, ale dostanu chybu „Argument 1 passed to Nette\Bridges\FormsLatte\Runtime::renderFormBegin() must be an instance of Nette\Forms\Form, instance of FilterForm given, called in…“
Takže mám komponentu s názvem FilterControl
use Nette\Application\UI;
use Nette\Forms\Form;
use App\Model;
class FilterForm extends UI\Control
{
/** @var Model\Filter */
private $filter;
private $database;
public $onFilterSave;
public function __construct(App\Model\Filter $filter)
{
parent::__construct();
$this->database = $filter;
}
public function createComponentForm()
{
$form = new Form;
$form->addSelect('type', NULL, $this->filter->getType())
->setPrompt('Typ');
$form->addSelect('brand', NULL, $this->filter->getBrand())
->setPrompt('Značka');
$form->addSelect('model')
->setPrompt('Model');
$form->addSelect('price')
->setPrompt('Cena od-do');
$form->addSelect('year')
->setPrompt('Rok výroby od');
$form->addSelect('fuel')
->setPrompt('Palivo');
$form->addSelect('km')
->setPrompt('Najeto km');
$form->addSelect('transmission')
->setPrompt('Převodovka');
$form->addSelect('places')
->setPrompt('Počet míst');
$form->addSubmit('send', 'Odeslat');
$form->onSuccess[] = [$this, 'processForm'];
return $form;
}
public function processForm($form)
{
$this->onFilterSave($this, $filter);
}
}
interface IFilterFormFactory{
/** @return \FilterForm */
function create();
}
továrničku mám zaregistrovanou jako
services:
- IFilterFormFactory
a v basePresneteru mám
/** @var \IFilterFormFactory @inject */
public $filterFormFactory;
protected function createComponentFilterForm()
{
$control = $this->filterFormFactory->create();
$control->onFilterSave[] = function (FilterForm $control, $filter){
$this->redirect('this');
};
return $control;
}
Děkuji za každou odpověď.
- Hug0
- Člen | 35
Ahoj,
je v tom nějaký chaos:
1)
Takže mám komponentu s názvem FilterControl
je asi ten „FilterForm“
2)
<?php
$this->database = $filter;
?>
má být asi:
<?php
$this->filter = $filter;
?>
a parametr onFilterSave potom:
<?php
$this->onFilterSave($this, $this->filter);
//nebo
$this->onFilterSave($this, $form);
?>
3)
Renderování bych akorát opisoval od
Davida