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