Routování házi chybu Trying to get property of non-object

vanaveno
Člen | 144
+
0
-

Dobrý den,
zkouším nastavit hezké url. Chtěl bych, aby se mi ve výsledné url nezobrazoval název presenteru ani akce, prostě čistý odkaz (slug) na post. Viz. níže

http://netteblog-us.svethostingu-tmp.cz/

Router jsem nastavil takhle.

<?php

namespace App;

use Nette;
use Nette\Application\Routers\Route;
use Nette\Application\Routers\RouteList;


final class RouterFactory
{


	/**
	 * @return Nette\Application\IRouter
	 */
	public function createRouter()
	{
	$router = new RouteList;
	$router[] = new Route('<slug>', 'Post:show');
	$router[] = new Route('<slug>', 'Categoryfilter:show');
	$router[] = new Route('<presenter>/<action>', 'Homepage:default');
	return $router;
	}
}

Tohle mi hází Trying to get property of non-object

Slug si to bere z databáze presenteru z odkazu vrchního menu Kategorie 1 …

public function renderShow($slug)
    {
        $this->template->category = $this->database->table('categories')->where('slug = ?', $slug)->fetch();


    }

Když to upravím takhle

"public function createRouter()
	{
	$router = new RouteList;
	$router[] = new Route('<slug>', 'Post:show');
	$router[] = new Route('filter/<slug>', 'Categoryfilter:show');
	$router[] = new Route('<presenter>/<action>', 'Homepage:default');

	return $router;
	}":null

Tak to sice funguje, ale zase mám v odkazu /filter/… a ten já tam nechci, chtěl bych čistě

http://netteblog-us.svethostingu-tmp.cz/kategorie-1

Jak toho docílit?

V v dalším kroku chci aby článek, na který kliknu, ještě obsahoval název kategorie v kterém je zařazený, to asi dostanu přes globální filtry, že ano.

http://netteblog-us.svethostingu-tmp.cz/…e-1/1-clanek

...
$router[] = new Route('<catetegory>/<slug>', 'Post:show');
...

Děkuji za radu
Vana

Petr Parolek
Člen | 455
+
0
-

jejda, vždyť jsme to tu spolu již nedávno řešili.

Ondřej Kubíček
Člen | 494
+
0
-

nemůžeš mít jednu stejnou routu na 2 presentery takhle, proto ti to první nefunguje, druhé jo

nějak si to musíš rozlišit,

/muj-clanek

$router[] = new Route('<slug>', 'Post:show');

a na kategorii bys to musel mít nějak takhle:

/kategorie-nazevkategorie

$router[] = new Route('kategorie-<category>', 'Categoryfilter:show');

a detail článku v kategorii
/kategorie-nazevkategorie/nazev-clanku

$router[] = new Route('kategorie-<category>/<slug>', 'Post:show'');
David Matějka
Moderator | 6445
+
+1
-

Muzes pomoci filtru – konkretne FILTER_IN – napsat funkci, ktera overi, ze slug existuje pro ten Post a v pripade, ze ne, tak vrati NULL a nette routing zkusi dalsi routu, vice k filtrum v doc

vanaveno
Člen | 144
+
0
-

Já vím, díky za ochotu. Tvoje řešení se mi líbí, bohužel z fragmentu tvého kódu to ještě nedokáži přizpůsobit svému řešení, které je zatím ještě spíše spletenec toho, co jsem zde našel. Jsem úplný začátečník, o programování v php znám zatím velmi málo, ale učím se. Nechci po nikom, aby mi dával své řešení, chtěl bych na to přijít sám, ale zjistil jsem, že bez nějakého už hotového kódu, to bude hodně těžké. Momentálně se snažím věci dostudovat a hledám, jak kdo co řešil. Bohužel pro mě, na fóru jsou jen fragmenty o kterých nevím jak k čemu navazují. Je to pro mě docela abstraktní záležitost, ale učím se a baví mě to. Nette se mi líbí, taky se mi líbí jejich stránky, jak jsou pěkně designově udělané a hlavně přehledné. Líbí se mi ten zvýrazněný kód, to by mě zajímalo v jakém pluginu je to udělané. Já používám na kódování editor Bluefish. Není špatný, ale kdyby to ukazovalo takový kód jako je na stránkách Nette, bylo by to lepší a hlavně by bylo parádní, kdyby to mělo i tu nápovědu kódu přímo pro Nette.

Ještě jednou díky za ochotu
Vana

ppar napsal(a):

jejda, vždyť jsme to tu spolu již nedávno řešili.

Editoval vanaveno (16. 1. 2019 11:32)

Petr Parolek
Člen | 455
+
0
-

na takové vychytávky je potřeba mít IDE, za mě doporučuju Apache Netbeans 10, je opensource a hlavně zdarma, jinak zude hodně lidí používá PHPStorm, ale ten je placený a není OSS.