Zjištování zda stránka existuje

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

Zdravím,

hledám nejlepší způsob jak testovat zda existuje nexistuje nějaká stránka, nejlépe nějakým aplicationRequstem aby se nerenderovali šablony zbytečně.

Mělo by to fungovat tak, že např. zakládám produkt a potřebuji otestovat zda stejnou url už nemá nějaká kategorie, produkt, článek atd… (maji stejnou strukturu).

Mělo by to ještě nejak vracet ID abych mohl porovnávat zda v případě když stránka existuje nepatří produktu,kategori, článku, který právě edituji.

Díky mockrát.

Myiyk
Člen | 321
+
0
-

Toto je funkční příklad na sandboxu:

class HomepagePresenter extends BasePresenter {
	/** @var \Nette\DI\Container */
	protected $router;

	public function __construct(\Nette\DI\Container $container) {
		parent::__construct();
		$this->router = $container->getService('router');
	}

	public function renderDefault() {
		$url = new \Nette\Http\UrlScript("/sign/in/123"); // zadej si vlastní adresu
		$r = $this->router->match(new \Nette\Http\Request($url));
		dump($r);
	}
}

Výsledek dumpu

Nette\Application\Request #f104
	method private => NULL
	flags private => array (1)
		secured => FALSE
	name private => "Sign" (4)
	params private => array (2)
		action => "in" (2)
		id => "123" (3)
	post private => array ()
	files private => array ()

$r je typu Nette\Application\Request nebo NULL když není shoda (chyba 404 – stránka nenalezena)

Pro vyhodnocení se použijou routery, stejně jako u zpracování url adresy.

Data z toho lze dostat jednoduše

$r->getPresenterName();
"Sign" (4)

$r->getParameters();
array (2)
	action => "in" (2)
	id => "123" (3)

Editoval Myiyk (25. 7. 2014 14:06)

jasin755
Člen | 116
+
0
-

Super! Jenom dotaz, jak získám router v service a ne v presenteru. Zkoušel jsem ho tam vložit pomocí DI jako \Nette\Application\Routers\Route a bohužel :(

jasin755
Člen | 116
+
0
-

Funguje to skoro dobře. Ještě jsem se zapoměl zmínit o jedné věci. Teď když zkusim match, tak to testuje na aktuálním hostovi a to já přesně nechci. Toho hosta bych si chtěl zadat sám a nevím jak to skloubit s routerlistem do sebe.

jasin755
Člen | 116
+
0
-

Ještě taková připomínka. Match netestuje existenci presenteru, takže to taky není uplně košér.