Router problém Notice Undefined offset

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

Dobrý deň. Prosím Vás viete mi niekto poradiť prečo mi Ladenka hlási Notice Undefined offset.

186:                                            $vysledok = array_search($id, $xml);
187:
188:                                            return $vysledok;
189:                                        }
190:                                    },
191:                                    Route::FILTER_OUT => function ($id) use ($xml) {
192:                                        if (!is_numeric($id)) {
193:                                            return $id;
194:                                        } else {
195:
196:                                            $vysledok = $xml[$id];
197:
198:                                            return $vysledok;
199:                                        }
200:                                    })));

prikladám routre:

$downloads = $this->download->returnCatIdUrl();

		$router[] = new Route('zverejnovanie[/<id>]', array(
			    'presenter' => 'Downloads',
			    'action' => 'showCat',
			    'id' => array(
                Route::FILTER_IN => function ($id) use ($downloads) {
                    if (is_numeric($id)) {
                        return $id;
                    } else {
                        $vysledok = array_search($id, $downloads);

                        return $vysledok;
                    }
                },
                Route::FILTER_OUT => function ($id) use ($downloads) {
                    if (!is_numeric($id)) {
                        return $id;
                    } else {

                        $vysledok = $downloads[$id];

                        return $vysledok;
                    }
                })));


$xml = $this->xml->returnCatIdUrl();

		$router[] = new Route('zverejnovania[/<id>]', array(
			    'presenter' => 'Xml',
			    'action' => 'showCat',
			    'id' => array(
                Route::FILTER_IN => function ($id) use ($xml) {
                    if (is_numeric($id)) {
                        return $id;
                    } else {
                        $vysledok = array_search($id, $xml);

                        return $vysledok;
                    }
                },
                Route::FILTER_OUT => function ($id) use ($xml) {
                    if (!is_numeric($id)) {
                        return $id;
                    } else {

                        $vysledok = $xml[$id];

                        return $vysledok;
                    }
                })));

a taktiež funkcie z xmlRepository:

public function returnCatIdUrl() {
        return $this->database->fetchPairs("select cat_id, cat_url FROM xml_cats");
    }

a z downloadsRepository:

public function returnCatIdUrl() {
        return $this->database->fetchPairs("select cat_id, cat_url FROM downloads_cats");
    }

v tabulke downloads_cats mám 4 položky:
ID: 1-Faktúry
ID: 2-Objednávky
ID: 4-Test
ID: 6-Test2

v tabulke xml_cats mám len 2 položky a to:
ID: 1-Faktúry
ID: 2-Objednávky

a keď som na linku:
/zverejnovanie/4
alebo na linku
/zverejnovanie/6

tak mi to hádže uvedenú chybu kdež to pri zadaní linku /zverejnovanie/1 alebo /zverejnovanie/2 funguje všetko tak ako má.

Ďakujem Vám za vaše rady. Prajem pekný deň.

Unlink
Člen | 298
+
0
-

A určite v $this->download a $this->xml nemáš to isté (tj. xmlRepository)

sniper1101
Člen | 21
+
0
-

nie nie, stokrát overené:

/** @var Model\DownloadsRepository @inject */
        public $download;

        /** @var Model\XmlRepository @inject */
        public $xml;

$downloads = $this->download->returnCatIdUrl();

$xml = $this->xml->returnCatIdUrl();
Unlink
Člen | 298
+
0
-

A chybu ti hlási na url /zverejnovanie/4 na riadku

196:                                            $vysledok = $xml[$id];

Nebude to tým, že sa snažíš vygenerovať nesprávny link?

Pretože

191:                                    Route::FILTER_OUT => function ($id) use ($xml) {
192:                                        if (!is_numeric($id)) {
193:                                            return $id;
194:                                        } else {
195:
196:                                            $vysledok = $xml[$id];
197:
198:                                            return $vysledok;
199:                                        }
200:                                    })));

sa aplikuje pri tvorbe odkazov s cieľom Xml:showCat

Editoval Unlink (2. 6. 2015 21:50)

sniper1101
Člen | 21
+
0
-

veď práve to je divné pretože /zverejnovanie/1 a /zverejnovanie/2 fungujú pekne s Downloads:showCat a už pri /zverejnovanie/4 alebo /zverejnovanie/6 hádže akoby sa snažilo generovať Xml:showCat

Unlink
Člen | 298
+
0
-

A na tej stránke /zverejnovanie/2
negenereruješ nejaké linky na Xml:showCat závislé od toho $id?

Alebo to uprav takto:

if (!is_numeric($id) || !isset($xml[$id])) {
    return $id;
} else {
    return $xml[$id];
}

Editoval Unlink (2. 6. 2015 22:08)

sniper1101
Člen | 21
+
0
-

na stránke /zverejnovanie/2 alebo /zverejnovanie/1 sa má zobraziť s tabuľkou downloads_cats a to isté by malo platiť aj pre stránke /zverejnovanie/4 alebo stránke /zverejnovanie/6 avšak tam hlási chybu akoby stále hľadal v xml_cats kde mám len dve položky… vôbec nerozumiem prečo sa to takto deje…

Unlink
Člen | 298
+
0
-

Akú tabuľku tam chceš zobrazovať, nejako nechápem.

Skús ešte ten kód čo som ti pripísal v predchádzajúcom poste.

sniper1101
Člen | 21
+
0
-

To myslíš vložiť do routy zverejnovania a do filter_in aj do filter_out?

Unlink
Člen | 298
+
0
-

No do tej zverejnovania[/<id>] pre OUT, veď tam ti to robí, ale stále si myslím že niekde zle generuješ odkaz. Pretože keď pristúpiš na zverejnovanie tak sa matchne tá prvá routa, a tým pádom nieje dôvod aby sa volal henten filter, ten sa ale volá, ak niekde generuješ link Xml:showCat id

sniper1101
Člen | 21
+
0
-

Pomohlo pridanie tvojho kódu ale aj tak nerozumiem prečo to vôbec robí, nevidím absolútne žiadnu chybu. Píšeš že zle generujem odkaz? Negeneroval som odkazy, tam je všetko ako má byť avšak keď som chcel zobraziť stránku Downloads:showCat 1 tak fungovala to isté aj pri Downloads:showCat 2 avšak keď som dal Downloads:showCat 4 tak bum chyba… nerozumiem skratka

Unlink
Člen | 298
+
0
-

Skus ten router takto

        $downloads = $this->download->returnCatIdUrl();

$router[] = new Route('zverejnovanie[/<id>]', array(
        'presenter' => 'Downloads',
        'action' => 'showCat',
        'id' => array(
                        Route::FILTER_IN => function ($id) use ($downloads) {
                            if (is_numeric($id)) {
                                return $id;
                            } else {
                                $vysledok = array_search($id, $downloads);

                                return $vysledok;
                            }
                        },
                        Route::FILTER_OUT => function ($id) use ($downloads) {
                            if (!is_numeric($id)) {
                                return $id;
                            } else {

                                $vysledok = $downloads[$id];

                                return $vysledok;
                            }
                        })));


        $xml = $this->xml->returnCatIdUrl();

$router[] = new Route('zverejnovania[/<id>]', array(
        'presenter' => 'Xml',
        'action' => 'showCat',
        'id' => array(
                        Route::FILTER_IN => function ($id) use ($xml) {
                            if (is_numeric($id)) {
                                return $id;
                            } else {
                                $vysledok = array_search($id, $xml);

                                return $vysledok;
                            }
                        },
                        Route::FILTER_OUT => function ($id) use ($xml) {
                            if (!is_numeric($id) || !isset($xml[$id])) {
                                return $id;
                            } else {
                                return $xml[$id];
                            }
                        })));
sniper1101
Člen | 21
+
0
-

Ide to aj takto ako si napísal aj tak ako si vravel pred tým, že to mám vložiť do zverejnovania[/<id>] pre OUT…

ďakujem ale vieš mi to prosím ťa objasniť prečo to pred tým nešlo? Pri všetkých (takých istých) typoch routy ako je táto mi to fungovalo a nikdy to nerobilo problém.

Unlink
Člen | 298
+
0
-

No to je len to, že ak dáš zverejnovania/neplatneID tak sa daný odkaz nebude pokúšať zmeniť na tú Cool url.

Len nechápem jedno, ak zadáš adresu /zverejnovanie/1 presmeruje ťa to na /zverejnovanie/Faktury ?

sniper1101
Člen | 21
+
0
-

ano ano presne tak, /zverejnovanie/1 na faktúry a /zverejnovanie/2 na objednávky ale akonáhle dáš 4 tak chyba… mne to príde tak, že /zverejnovanie/1 a /zverejnovanie/2 fungujú pretože tieto dve mám aj v tabulke xml_cats… ale nerozumiem prečo sa to tak správa…

Unlink
Člen | 298
+
0
-

No ale keď tam dáš tú podmienku, čo som písal, tak by ti aj odkaz zverejnovanie/4 mal ísť, nie?

Ak ide, pozri tracy, ktorú routu to matchne

sniper1101
Člen | 21
+
0
-

Áno funguje to tak, a matche downloads tak ako aj má, ale stále nerozumiem prečo to pred tým nefungovalo..