Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][Kohana]Routing
Forum PHP.pl > Forum > Przedszkole
MateuszS
Witam, mam znowu problemik z routingiem w Kohana. Mianowicie chcę zrobić tak że mamy adresy

Kod
strona.pl/admin/news/add
strona.pl/admin/news/edit/5
strona.pl/admin/gallery/add
... itd


mój routing wygląda następująco:

  1. Route::set('admin', '<controller>(/<action>(/<id>))',
  2. 'id' => '\d+',
  3. 'controller' => '(panel|news|gallery|films)',
  4. 'action' => '(add|edit|delete)'
  5. ))
  6. ->defaults(array(
  7. 'directory' => 'admin',
  8. 'controller' => 'panel',
  9. 'action' => 'index'
  10. ));


utworzyłem w folderze kontroler folder 'admin' a w nim kontroler panel.php. Jednak pojawia się błąd który mi nic nie mówi i nie nasuwa żadnego pomysłu
Kod
HTTP_Exception_404 [ 404 ]: The requested URL admin/index was not found on this server.


Dodam że znalazłem podobny routing u kolegi który działa (mu).

Pozdrawiam
skowron-line
Kod
    Route::set('admin', '<controller>(/<action>(/<id>))',
    array(
    'id' => '\d+',
    'controller' => '(panel|news|gallery|films)',
    'action'    => '(add|edit|delete)'
    ))
    ->defaults(array(
    'directory'    => 'admin',
    'controller' => 'panel',
    'action' => 'index'
    ));
tu
Kod
    'controller' => '(panel|news|gallery|films)',
    'action'    => '(add|edit|delete)'
nie widze sensu z tego względu że jeżeli nie będziesz miał innych kontrolerów to dostaniesz 404

A co do tego
Kod
HTTP_Exception_404 [ 404 ]: The requested URL admin/index was not found on this server.

to nie masz zdefiniowanego kontrolera index do którego się odwołujesz.
klocu
A Route::set nie powinien wyglądać tak:
  1. Route::set('default_subdir', '<directory>/<controller>(/<action>)') ...

fakt dajesz default setting, ale nie wskazujesz gdzie fizycznie w nazewnictwie ten podkatalog ma funkcjonować (w oparciu o Kohana 3.3)
MateuszS
@skowron-line, tak sorki, tam ma być "panel" zamiast "index" bo wywala błąd dla admin/panel.
Dopisałem tak jak zalecił @klocu "<directory>/ ale nadal mam 404. Kontroler jest utworzony w folderze admin (panel.php).

Moja wersja kohana 3.2
skowron-line
Użyj metody matches z klasy Route do testowania routingu.

Zobacz sobie coś takiego.
  1. Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
  2. ->defaults(
  3. 'directory' => 'admin',
  4. 'controller' => 'panel',
  5. 'action' => 'index'
  6. )
  7. );


Edit

Wrzuciłem sobie u siebie
  1. Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))')
  2. ->defaults(
  3. 'directory' => 'admin',
  4. 'controller' => 'panel',
  5. 'action' => 'index'
  6. )
  7. );
  8.  
  9. $route = Route::get('admin');
  10. echo Kohana_Debug::dump($route->matches('admin/panel'));

i dostaje
Kod
array(3) ( "controller" => string(5) "panel" "directory" => string(5) "admin" "action" => string(5) "index" )

więc działa (ko 3.2)

Edit 2
A tu działający twój route z 1 posta
  1. Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))',
  2. 'id' => '\d+',
  3. 'controller' => '(panel|news|gallery|films)',
  4. 'action' => '(add|edit|delete)'
  5. ))
  6. ->defaults(array(
  7. 'directory' => 'admin',
  8. 'controller' => 'panel',
  9. 'action' => 'index'
  10. ));
  11.  
  12. $route = Route::get('admin');
  13. echo Kohana_Debug::dump($route->matches('admin/panel/edit/10'));
MateuszS
Hmm usunąłem linijkę z directory i działa, why?
skowron-line
Cytat(MateuszS @ 19.02.2013, 00:15:51 ) *
Hmm usunąłem linijkę z directory i działa, why?

A napewno strukture katalogów masz prawidłową ?
Kod
- controler
-- admin

MateuszS
No właśnie mam dobry. Tylko teraz nie wiem czy mój kontroler admin/index.php obsługuje akurat ten adres admin/index bo jak chcę wpisać jakiś content to nic się nie pojawia ;/ Ogólnie coś się posypało bo odpalając admin/panel/ załącza mi sę formularz logowania który jest pod /login/

  1. Route::set('admin', 'admin(/<controller>(/<action>(/<id>)))',
  2. 'id' => '\d+',
  3. 'controller' => '(panel|news|gallery|films)',
  4. 'action' => '(index|add|edit|delete)'
  5. ))
  6. ->defaults(array(
  7. 'controller' => 'panel',
  8. 'action' => 'index'
  9. ));
  10.  
  11.  
  12. Route::set('auth', '<action>',
  13. 'action' => '(login|logout)'
  14. ))
  15. ->defaults(array(
  16. 'controller' => 'auth'
  17. ));
  18.  
  19.  
  20.  
  21. Route::set('news', 'news(/<newsid>)', array('newsid' => '\d+'))
  22. ->defaults(array(
  23. 'controller' => 'news',
  24. 'action' => 'index'
  25. ));
  26.  
  27.  
  28. Route::set('default', '(<controller>(/<action>(/<id>)))')
  29. ->defaults(array(
  30. 'controller' => 'index',
  31. 'action' => 'index',
  32. ));


natomiast jakby przestało działać

  1. $this->template->content = "blalblala";
skowron-line
Pokaż kontroller index
MateuszS
Przemianowałem go na panel.php żeby nie było konfliktu z index.php po którym dziedziczy widok.

Żeby nie było bałaganu teraz podsumuję jak to wygląda:

bootstrap.php tak jak w poprzednim poście

struktura katalogów:
Kod
controller
  -index.php
  -auth.php
  -news.php
  -admin/
    --panel.php
    --news.php


w panel.php jak i news.php mam tymczasowo
  1. //panel.php
  2. <?php defined('SYSPATH') or die('No direct script access.');
  3.  
  4. /**
  5.  * Klasa odpowiadająca za ogólny widok panelu administratora
  6.  */
  7.  
  8. class Controller_Panel extends Controller_Index
  9. {
  10. public function action_index()
  11. {
  12. $this->template->content = "asdasdada"; //zeby spr. czy w ogole cos sie wyswietli, $content to zmienna
  13. //w pliku widoku ktora zmienia cialo jednego diva w ktorym beda np. newsy itd. Jesli kontroler dziala powinno
  14. //wczytac mi strone ale z pustym "ciałem" a po zdefiniowaniu content jak powyżej powinien pojawić się napis
  15. }
  16. }
  17.  
  18.  
  19. //news.php
  20. //analogicznie


I jak teraz wszystko oporządkowałem to wróciłem do punktu wyjścia, 404 na wszystkich podstronach. W poprzednim poście napisałem że mi się załącza form logowania na podstronie admina - to już nie aktualne. W tej chwili na każej podstronie które powinny wyświetlić to "asdasdada" wywala 404.

Kod
strona.pl/admin
strona.pl/admin/panel/
strona.pl/admin/panel/index
strona.pl/admin/news
strona.pl/admin/news/index
skowron-line
Nie
  1. class Controller_Panel extends Controller_Index

Tylko
  1. class Controller_Admin_Panel extends Controller_Index


Controller - folder kontroller
Admin - podfolder admin
Panel - nazwa kontrolera

admin/panel (folder/kontroler)
MateuszS
Jaki wstyd... podstawy podstaw, zupełnie o tym zapomniałem. Dzięki @skowron-line.
skowron-line
Cytat(MateuszS @ 19.02.2013, 13:42:16 ) *
Jaki wstyd... podstawy podstaw, zupełnie o tym zapomniałem. Dzięki @skowron-line.

Żeby mi to było ostatni raz smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.