Temat: Niecodzienne routingi

Witam,
narazie nie zgłebiałem tematu więc może zna kotś jakieś lepsze rozwiązanie na taki problem :
wymyśliłem sobie takie routingi :

dla uzytkownika jan_kolalski :

/pages/jan_kowalski/view
/pages/jan_kowalski/displayAll
/pages/jan_kowalski/cosTam

dla uzytkownika jan_nowak


/pages/jan_nowak/view
/pages/jan_nowak/displayAll
/pages/jan_nowak/cosTam

view , displayAll , cosTam to metody controllera pages

chodzi mi o to zeby po wklepaniu tego urla : /pages/jan_nowak/view
uruchomic metode view i przekazac od niej jan_nowa  jako $userName;

wyglada to tak :

<?php
class PagesController extends AppController {
       public $name = "Pages";
       public $uses = array();

      public function view($userName) {
      }

      public function displayAll($userName) {
      }

      public function cosTam($userName) {
      }

}

Wg mnie bez re-factoringu kejka sie nie obejdzie zeby bylo gladko i przyjemnie ....

zmienilem /cake/dispatcher.php  dodajac takie linijki ...

        if ($controller->name = "Pages" && (!isset($methods[strtolower($params['action'])]) && isset($methods[$params['pass'][0]]))) {
            $tmp = $params['action'];
            $params['action'] = $params['pass'][0];
            $params['pass'][0] = $tmp;
        }

nad linia :

    if (!isset($methods[strtolower($params['action'])])) {

Tylko ze nie chce stosowac refactoringu o ile to nie ostatecznosc, z drugiej strony biorac sie za refactoring mozna smialo pokusic sie o takie urle :
/jan_kowalski/view  - co uruchomi /pages/jan_kowalski/view, co prawda da sie to zrobic na routingach np w ten sposob :

Router::connect('/jan_kowalski/:action/*', array('controller' => 'pages', "jan_kowalski"));

Tylko troche nie "teges" wpisywac raz ze uzytkownikow z bazy w plik, a dwa zwalnia to cala aplikacje ( przy powiedzmy 1000 wpisow - a  bede miec okolo 5k wpisow)....

Jakies ciekawe pomysly ?

2

Odp: Niecodzienne routingi

Hmm moze czegos nie zrozumialem.... ale czy to nie jest wymyslanie kola?

Nie wystarczy stworzyc kontroler 'pagess' lub i w nim jako argument przekazywac imie i nazwisko i reszte? Czy cos pochopnie przeczytalem i nie kapuje ?

Ostatnio edytowany przez duke_piotr (2009-04-07 13:59:11)

3

Odp: Niecodzienne routingi

no to moze wytlumacze w  ten spsob :

mamy 1000 klubow sporowych ( ja bede miec 2,5 raza wiece - liczba ma znaczenie) dla przykladu kilka z nich to :
"waleczni krwiopijcy",  "szybcy impotenci" . Chcac zbudowac jakis system templatow dla nich, dobrze bylo by oprzec to na tylko jednym kontrolerze z 3 akcjami :
wyniki, newsy i index

Stosujac standardowe rozwiazania  routingu kejka + kontroler pages  dostane urle takie :


przyklad.pl/pages/index/walczeni_krwiopijcy - indexu nie sposob (chyba)  pominac, chcac przekazac parametr
przyklad.pl/pages/wyniki/walczeni_krwiopijcy
przyklad.pl/pages/newsy/walczeni_krwiopijcy

przyklad.pl/pages/index/szybcy_impotenci
przyklad.pl/pages/wyniki/szybcy_impotenci
przyklad.pl/pages/newsy/szybcy_impotenci

jest ok, ale fan szybkich imponentow rowniez bedzie szybki i nie wpisze, lub zapomni  index przed nazwa klubu.....

a ja chce to zrobic tak , bez zmian w kodzie samego frameworka:

przyklad.pl/pages/walczeni_krwiopijcy/ - odpala index("waleczni_krwiopijc")
przyklad.pl/pages/walczeni_krwiopijcy/index - odpala index("waleczni_krwiopijc")
przyklad.pl/pages/walczeni_krwiopijcy/wyniki  - odpala wyniki("waleczni_krwiopijc")
przyklad.pl/pages/walczeni_krwiopijcy/newsy -  - odpala newsy("waleczni_krwiopijc")

przyklad.pl/pages/szybcy_impotenci/ - odpala index("szybcy_impotenci")
przyklad.pl/pages/szybcy_impotenci/index - odpala index("szybcy_impotenci")
przyklad.pl/pages/szybcy_impotenci/wyniki  - odpala wyniki("szybcy_impotenci")
przyklad.pl/pages/szybcy_impotenci/newsy  - odpala newsy("szybcy_impotenci")


W tech chwili z lekkim refactoring'iem dispatcher'a doszedlem do docelowego rozwiazania :

przyklad.pl/walczeni_krwiopijcy/ - odpala index("waleczni_krwiopijc") w PagesController
przyklad.pl/walczeni_krwiopijcy/index - odpala index("waleczni_krwiopijc") w PagesController
przyklad.pl/walczeni_krwiopijcy/wyniki  - odpala wyniki("waleczni_krwiopijc") w PagesController
przyklad.pl/walczeni_krwiopijcy/newsy -  - odpala newsy("waleczni_krwiopijc") w PagesController

przyklad.pl/szybcy_impotenci/ - odpala index("szybcy_impotenci") w PagesController
przyklad.pl/szybcy_impotenci/index - odpala index("szybcy_impotenci") w PagesController
przyklad.pl/szybcy_impotenci/wyniki  - odpala wyniki("szybcy_impotenci") w PagesController
przyklad.pl/szybcy_impotenci/newsy  - odpala newsy("szybcy_impotenci") w PagesController


Nie wydaje mi sie zeby to bylo wynajdywanie kola - raczej uproszczenie ludziom zycia, a routing w kejku jest bardzo prymitywny, w pornwnaiu do innych frameworkow ( php i niekoniecznie php).

duke ... jezeli mi dojdzie do tego klasyfikacja danych sportow np

przyklad.pl/koszykowka/szybcy_impotenci/
przyklad.pl/koszykowka/wsciekli_krwiopijcy/
przyklad.pl/pilkanozna/szybcy_impotenci/
przyklad.pl/pilkanozna/wsciekli_krwiopijcy/

w kejku by to wygladalo tak :

przyklad.pl/pages/newsy/koszykowka/szybcy_impotenci - totalnie bez sensu

Ostatnio edytowany przez robal77 (2009-04-07 17:58:36)

4

Odp: Niecodzienne routingi

Czyli adres taki jak:

przyklad.pl/team/szybcy_impotenci/wyniki odpada?

Troche to bedzie nieladne z poziomu kontrolera ale wynik 'podobny'.

wiec: w routingu:
Router::connect('/teams/*', array('controller' => 'teams'));

a w teams_controller:
function index($team_name, $action).

rozbuduje sie troche funkcja index ale osiagnie to co chciales nie wymyslajac nic nowego.

5

Odp: Niecodzienne routingi

No ok, ale co  w przypadku gdy akcja wyniki bedzie oczykiwac 10 paremetrow na wejsciu np

function wyniki($par1, $par2, ...., $par9, $par10) {}

wtedy index bedzie wygladac tak

function index($team_name, $action, $par1 =null, $par2 =null, ...., $par9 =null, $par10 =null) {}

potem w kazdej akcji bede sie musial bawic w rzutowane typow, bo za kazdym razem zamiast spodziewanego array, int czy str,  moge dostac null,albo tworzyc konstrukcje if ... elseif ... else w indxie, gdy bede miec powiedzmy 20 metod "akcji" o pomylke nie bedzie trudno. Ciezko stwierdzic jak by sie to mialo do paginacji lub ajaxa.

Chyba jednak bedzie prosciej dolozyc 5 lnijek kodu, ktory zalatwi wszystko.

6

Odp: Niecodzienne routingi

no tak wtedy sie zrobi syf wink

Szukajac czegos natrafilem na to, moze nie ma zwiazku a moze i ma -> zerknac nie zaszkodzi tongue (ale kategorie mozna powprowadzac)

http://book.cakephp.org/view/476/REST

Ostatnio edytowany przez duke_piotr (2009-04-09 12:26:07)