Routa pro ErrorPresenter, připojení k db v RouterFactory

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

Mám tyto dvě routy a potřeboval bych ještě napsat routu pro ErrorPresenter, v HomepagePresenteru volám $this->redirect(‚Error:405‘)

/**
                * Routes for the get template
                */
               $router[] = new Route('template/<code>[/<lang>][/<type>][/<pri>][/<sec>][/<ter>]', array(
                   'presenter' => 'Homepage',
                   'action' => 'pages'
               ));

                /**
                * Routes for standard pages
                */
               $router[] = new Route('[<lang>][/<type>][/<pri>][/<sec>][/<ter>]', array(
                   'presenter' => 'Homepage',
                   'action' => 'pages',
               ));

Avšak když napíši něco jako toto, tak „Tato stránka obsahuje smyčku pesměrování“

$router[] = new Route('[<lang>][/<type>][/<pri>][/<sec>][/<ter>]/error', array(
    'presenter' => 'Error',
    'action' => '405',
));

___________________________________________________

Podle tohoto videa https://www.youtube.com/watch?… jsem chtěl udělat namísto idček v routě třeba namísto ubytovani/4, něco jako ubytovani/nazevpokoje-4

Jakou na to udělat routu a hlavně nazevpokoje potřebuji z databáze. Ve videu se k tomu přistupuje přes container, ale to bylo asi nějaké starší nette, když koukám, že RouterFactory tam vůbec nemají a nemám přístup ke containeru… jak snadno a jednoduše přistoupit k databázi nebo zavolat metodu, co mi vypíše jméno toho nazvupokoje?

ali
Člen | 342
+
0
-

Na error presenter nepotrebujes routu, staci ti vyvoval misto toho v presenteru chybu, takto:

$this->error("bla bla bla",405);

K druhemu bodu, routa cca takto:

$frontRoute[] = new Route("pokoj-<pokoj_id>/[<pokoj_name>/]",["presenter" => "Pokoj","action" => "default"]);

Presenter:

protected function startup()
{
  parent::startup();
  $pokoj = $this->model->getPokoj($this->params["pokoj_id"]);

  if(!isSet($this->params["pokoj_name"])){
    $this->redirect("Pokoj:default",$pokoj->pokoj_id,$pokoj->pokoj_name);
  }
}

public function renderDefault($pokoj_id,$pokoj_name)
{
...

Editoval ali (22. 3. 2015 9:44)

Xclick
Člen | 2
+
0
-
  1. Ale co v případě, kdy mám ErrorPresenter nastavený na vlastní error šablony, které když ve složce nejsou, tak se tepre pak použijí ty běžné. $this->error prostě jen vyhodím výjimku, ale neodkáži se na ErrorPresenter, ne? Kvůli tomu jsem chtěl tu routu :-)
  2. Čekal jsem spíš odpověď něco jako (což mi samozřejmě nefunguje, ale našel jsem to ve všech podobných dotazech)
private $mujModel;

    public function inject(Model\MujModel $mujModel) {
        $this->mujModel = $mujModel;
    }
  1. Dá se nastavit cesta k šabloně z presenteru, která není ve složce, která se jmenuje jako presenter?
ali
Člen | 342
+
0
-
  1. Kdyz si vypnes v bootstrapu debug mod, tak ti zacne najizdet error presenter normalne, jenom v debug modu vydis vyjimky
  2. Samozrejme, abys mohl pouzivat model v presenteru, prvni si ho tam musis injectnout, presne tak jak jsi to napsal + model musis mit zadefinovany v configu, aby sel injectnout
  3. Urcite to pujde, ale na tohle ti bude muset odpovedet nekdo kdo do presenteru vidi vice jak ja