metody action<> a render<> se neprovedou, pouze renderDefault

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

Ahoj,

řeším problém s metodou action.. a render, očekával bych, že se action provede jako první, poté první render a poté následující. Bohužel se to chová zvláštně a ani po přidání jednoduchých ifů, pro vyzkoušní to prostě funguje nesprávně a ty podmínky se vůbec nevykonají a mám pocit tedy, že se nevykonají ani ty metody.

mám takovýto presenter:

<?php

namespace App\Presenters;

use Nette,
	App\Model;


class UkazGaleriiPresenter extends BasePresenter
{
    /**
     * @var Repository\ShowGallery @inject
     */

    public $pictures;

    public function actionDetail($id)
    {
if(1 == 1) echo "action works";
exit;
        $this->gallery = $this->pictures->getGallery($id);
        if($this->gallery == false)
            {
                echo "doesnt work";
                throw new \Nette\Application\BadRequestException();

            }
    }

    public function renderDetail()
    {

if(1 == 1) echo "render works";
exit;
        $this->template->gallery = $this->gallery;
        var_dump($this->gallery);
        exit;
    }

    public function renderDefault($id)
    {

        $this->template->pictures = $this->pictures->getPictures($id);

        if(count($this->template->pictures) == 0)
            {
                $this->flashMessage('Galerie je prozatím bez obsahu.', 'info');
            }
    }

}

hlasí mi to chybu v šabloně, že proměnná gallery nebyla naplněna, což znamená že exity to ignoruje o podmínkách nemluvě.

Díky,

Pavel Macháň
Člen | 282
+
0
-

qteck napsal(a):

Ahoj,

řeším problém s metodou action.. a render, očekával bych, že se action provede jako první, poté první render a poté následující. Bohužel se to chová zvláštně a ani po přidání jednoduchých ifů, pro vyzkoušní to prostě funguje nesprávně a ty podmínky se vůbec nevykonají a mám pocit tedy, že se nevykonají ani ty metody.

mám takovýto presenter:

<?php

...

hlasí mi to chybu v šabloně, že proměnná gallery nebyla naplněna, což znamená že exity to ignoruje o podmínkách nemluvě.

Díky,

tak za

  1. ten if 1==1 je uplne knicemu
  2. ukaz routy
  3. jak provede první render a pak druhý? Mrkni na životní cykl presenteru https://files.nette.org/…fecycle2.gif

Editoval EIFEL (4. 6. 2014 19:31)

David Matějka
Moderator | 6445
+
+1
-

pokud se vykona renderDefault, znamena to, ze akce == default, proto se nemohou vykonat obsluzne metody pro akci detail. Cetl si vubec dokumentaci?

Editoval matej21 (4. 6. 2014 19:29)

qteck
Člen | 164
+
0
-

četl jsem o životnosti presenteru, ale jak to funguje to jsem se nedočetl.

pochopil jsem to tak, že se vykoná action a poté se vykonávají render metody a předtím může být ještě renderBefore a handle.

Nemáte tady k tomu nějáký ukázkový zdroják nebo článek, světe div se ale hledal jsem také něco o action metodách, protože nevím jak to funguje a našel jsem prd. Nette examples obsahují jedinou takovou metodu a to actionOut a hledal jsem v souvislosti s tím co si napsal nějaké routy, ale našel jsem prd.

Dokumentaci jsem četl, a čtu jí stále průběžně. Tohle je můj první fw, tak trpělivost se mnou, dělám co mohu.

Díky

qteck
Člen | 164
+
0
-
class RouterFactory
{

	/**
	 * @return \Nette\Application\IRouter
	 */
	public function createRouter()
	{
		$router = new RouteList();

                //$router[] = new Route('admin/<presenter>/<action>[/<id>]', 'Admin:Hompepage:default');
		$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
		return $router;
	}

}

tomuhle taky moc neorzumim, je vidět že jsem se pokoušel přidat modul, ale ne úplně úspěšně, chovalo se to zvláštně.

co se týče toho zápisu, chápu to tak, že je to v podstatě alias pro volání akce presenteru a nějakého parametru. jak zapsat ale action metody do toho, tomu nerozumím.

Co se obecně rout týče, moc tomu nerozumím, ještě to několikrát pořádně načtu, ale určitě by mi pomohlo, kdyby mi tady někdo napsal příklad co pasuje na ty metody výše.

Pavel Macháň
Člen | 282
+
+1
-

qteck napsal(a):

class RouterFactory
{

	/**
	 * @return \Nette\Application\IRouter
	 */
	public function createRouter()
	{
		$router = new RouteList();

                //$router[] = new Route('admin/<presenter>/<action>[/<id>]', 'Admin:Hompepage:default');
		$router[] = new Route('<presenter>/<action>[/<id>]', 'Homepage:default');
		return $router;
	}

}

tomuhle taky moc neorzumim, je vidět že jsem se pokoušel přidat modul, ale ne úplně úspěšně, chovalo se to zvláštně.

co se týče toho zápisu, chápu to tak, že je to v podstatě alias pro volání akce presenteru a nějakého parametru. jak zapsat ale action metody do toho, tomu nerozumím.

Co se obecně rout týče, moc tomu nerozumím, ještě to několikrát pořádně načtu, ale určitě by mi pomohlo, kdyby mi tady někdo napsal příklad co pasuje na ty metody výše.

new Route('<presenter>/<action>[/<id>]', 'Homepage:default')

z URL se veme první za lomítkem jako jméno presenteru (domain.tld/galerie = GaleriePresenter), který se použije. Za dalším lomítkem máš akci (domain.tld/galerie/seznam) která zavolá action<JmenoAkce> a následně render<JmenoAkce>.

Takzvaně pokud budeš mít routu ‚<presenter>/<action>[/<id>]‘ a v url budeš mít domain.tld/galerie/seznam zavolá se v GaleriePresenter metoda actionSeznam() a renderSeznam()

Editoval EIFEL (4. 6. 2014 20:32)

qteck
Člen | 164
+
0
-

To jsem fakt hlupák, ale.

Už mi to je jede, já to právě zkoušel přejmenovat na default ty actiony, ale házelo mi tu to chybu, jenže jak jsem byl unavenej tak jsem si nevšiml, že to vyhazuje: undeclared property – co se té this->gallery týče, tak jsem jí zapsal, metody upravil zpět na default a je to.7

a samozřejmě děkuji

Editoval qteck (5. 6. 2014 4:54)