Filtr výpisu dat z DB jde přes actionDefault() a ne renderDefault()

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Desttro
Člen | 126
+
0
-

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

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)

Desttro
Člen | 126
+
0
-

Udělal jsem tohle:

public function processSelectSupplier(Form $form)
    {
         $values = $form->getValues();
         $this->redirect('Homepage:default', isset($values->suppliers) ? $values->suppliers : NULL);
    }

Ale furt to hází stejnou chybu :/

Editoval Desttro (26. 11. 2014 6:51)

TomasHalasz
Bronze Partner | 79
+
+1
-

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.

Desttro
Člen | 126
+
0
-

Aha, přesně jsem tomu nerozuměl. Jenom ošetření uživatele, zda je přihlášen či nikoliv.

public function actionDefault()
{
    if (!$this->user->isLoggedIn()) {
        $this->redirect('Sign:in');
    }
}
Etch
Člen | 403
+
0
-

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)

Desttro
Člen | 126
+
0
-

Děkuji, už to funguje. Právě jsem to zkoušel, přidat parametr k actionDefault. Ale bez správného redirectu to nešlo.

Díky