Roury fungují, ale nedá se dostat na pohled přes {plink nazevpohledu}
- Petr Mašát
- Člen | 101
Ahoj všem,
vím že se tu ohledně routování řešilo snad už úplně všechno, ale bohužel jsem odpověď nenašel ani po dvou dnech procházení jednotlivých příspěvků, tak se osměluji a zkusím se zeptat.
V bootstrap.php mám nastavenu rouru:
$router[] = new Route('<page .*><filetype (\.html()|(\.))><action>', array(
'presenter' => 'Page',
'action' => 'default',
));
abych mohl mít například dvě adresy
a na ně dát buďto již uloženou stránku a nebo její variantu pro editaci. V PagePresenter.php mám vytvořené dvě třídy
public function renderDefault($page) {
$this->template->title = 'neco';
$this->template->text = 'muhehe';
}
public function renderEdit() {
$this->template->title = 'neco - edit';
$this->template->text = 'umcaca';
}
Při zadání jednotlivých stránek se vše v pořádku vykoná, ale
jakmile zkusím zadat v Page.default.phtml
žádost aby mi to
poslalo link na editaci tj. {plink edit}
tak mi to napíše
/o-nas error: No route for Page:edit()
.
Asi mi uniká nějaká maličkost, protože když dám link ručně do url tak roura funguje.
Nemá někdo nějakou myšlenku co dělám špatně, či zda třeba nechápu systém pohledů a routování zcela špatně.
Díky moc.
- ViliamKopecky
- Nette hipster | 230
Co použít dvě routy?
$router[] = new Route('<page .*>.html', array(
'presenter' => 'Page',
'action' => 'default',
));
$router[] = new Route('<page .*>.edit', array(
'presenter' => 'Page',
'action' => 'edit',
));
- ViliamKopecky
- Nette hipster | 230
Otestováno:
// require LIBS_DIR . '/Nette/loader.php';
$router = new MultiRouter();
$router[] = new Route('<page .*>.html', array(
'presenter' => 'Page',
'action' => 'default',
));
$router[] = new Route('<page .*>.edit', array(
'presenter' => 'Page',
'action' => 'edit',
));;
$url = "http://example.com/neco.html";
$httpRequest = new HttpRequest();
$httpRequest->setUri(new UriScript($url));
Debug::dump($router->match($httpRequest));
$url = "http://example.com/neco.edit";
$httpRequest = new HttpRequest();
$httpRequest->setUri(new UriScript($url));
Debug::dump($router->match($httpRequest));
Neruší ti to nějaká jiná routa?
- Petr Mašát
- Člen | 101
Hm, všiml jsem si že používám místo
$router = new MultiRouter();
toto:
$router = Environment::getApplication()->getRouter();
$router = $application->getRouter();
a když to nahradím tvou variantou tak mi to padne do chyby (neexistující
presenter DefaultPresenter) ještě rychleji : )
Ten když vytvořím (nechápu proč ho musím vytvářet, vždyť ty routy
míří přece na PagePresenter) tak se mi to pro změnu zacykli : /
Myslím že asi dělám něco velice nedobře, ale stále mi nedochází co, tak bych tě chtěl poprosit zda by ses nemohl podívat na můj aktuální stav projektu , protože jinak bychom se možná mohli točit na místě vzhledem k tomu že asi nedokáži přesně pochopit a popsat kde je tzv. zakopán pes.
Jen měj prosím slitování nad poslaným kódem, jsem holt jenom kodér jenž si chce zkusit něco napsat : ) tzn. poslaný kód bude obsahovat nemalé množství špatných praktik.
Díky moc.
- ViliamKopecky
- Nette hipster | 230
Tak… problém byl především v .htaccess, kterej jsi neměl v document_root, ale v tom kořenovým adresáři a ještě byl nějakej změněnej… a pro jistotu jsem ti přidal ještě takovou routu, která schramstne celkem všechno co neprojde těma nad ní. tady
Jestli ten .htaccess měl znamenat, že chceš aby web fungoval přímo odtamtud namísto až z document_root, tak je lepší tam přesunout celej obsah toho document_root, a v index.php změnit cesty k LIBS_DIR a APP_DIR.
- Petr Mašát
- Člen | 101
.htaccess jsem měl v kořenovém adresáři, protože jsem měl
špatně nastavenou v konfiguraci apache DocumentRoot
a to do
/var/www/
a ne do /var/www/document_root
–
opraveno, takže nyní již ten .htaccess v kořenu nepotřebuji
(vymazal jsem ho).
S tvojí úpravou již stránka plink vrací ale bohužel ne jako
http://www.domena.cz/o-nas.edit
ale jako
http://www.domena.cz/page/edit
tj. použije se pro editaci tento
kousek:
$router[] = new Route('<presenter>/<action>/<id>', array(
'presenter' => 'Page',
'action' => 'default',
'id' => NULL,
));
a ne tento:
$router[] = new Route('<page .*>.edit', array(
'presenter' => 'Page',
'action' => 'edit',
));
Nevíš prosím tě co ještě s tímto problémem?
Díky za tvoji trpělivost.