Filtr výpisu dat z DB jde přes actionDefault() a ne renderDefault()
- Desttro
- Člen | 126
Zdravím,
mám jednoduchý filtr (selectbox) kde se mi načtou pole s ID z databáze.
Vyberu nějakou položku, kliknu na odeslat a Nette mi vyhodí:
Nette\Application\UI\InvalidLinkException
Passed more parameters than method
App\Presenters\HomepagePresenter::actionDefault() expects.
Čekal bych, že to půjde přes renderDefault(), kde na parametr už čeká
SQL dotaz.
Furt si s tím lámu hlavu, nevíte co stím? Potřebuju pouze a jenom
vyfiltrovat data podle supplier_id
Děkuji za radu
public function renderDefault($value)
{
if ($value != null)
{
$sql = $this->context->manufacturing->findAll()->select('manufacturing.*, suppliers.name')->where('supplier_id', $value);
}
else
{
$sql = $this->context->manufacturing->findAll()->select('manufacturing.*, suppliers.name');
}
$this->template->records = $sql;
$this->template->date = new Nette\DateTime();
$this['header']->addTitle('Výroba');
}
protected function createComponentSelectSupplier()
{
$form = new Form();
//$suppliers = $this->getSuppliers();
$suppliers = HomepagePresenter::getSuppliers();
$form->addSelect('suppliers')
->setItems($suppliers)
->setPrompt('Vyberte dodavatele');
//->setAttribute("onChange", "submit();");
$form->addSubmit('send', 'Vybrat');
$form->onSuccess[] = $this->processSelectSupplier;
return $form;
}
public function processSelectSupplier(Form $form)
{
$values = $form->getValues();
$this->redirect('Homepage:default', $values);
}
public function getSuppliers()
{
$row = $this->database->table('suppliers')
->select('id, name')
->order('name ASC')
->fetchPairs('id', 'name');
return ($row) ? $row : NULL;
}
Editoval Desttro (26. 11. 2014 6:48)
- Marek Šneberger
- Člen | 130
Ta chyba je celkem jasná :-)
$this->redirect('Homepage:default', isset($values->suppliers) ? $values->suppliers : NULL);
Krom toho, že context je fujky řešení.
Editoval Marek Šneberger (26. 11. 2014 0:10)
- TomasHalasz
- Bronze Partner | 79
Píšeš, že Ti to dává tuto chybu:
`Nette\Application\UI\InvalidLinkException
Passed more parameters than method
App\Presenters\HomepagePresenter::actionDefault() expects.`
A ta říká, že actionDefault dostává více parametrů než očekává. Máš v tom HomepagePresenteru actionDefault metodu? Pokud ano, pošli ji.
- Etch
- Člen | 403
Z té hlášky je zcela evidentní, že metoda actionDefault vypadá následovně
public function actionDefault() {
...
}
uprav to na
public function actionDefault($value) {
...
}
PS: Navíc to co máš v té metodě by stejně asi bylo lepší ve startup() popřípadě v checkRequirements()
Editoval Etch (26. 11. 2014 7:35)