1

Temat: Zmiana urli

witam,

chciałbym tworzyc linki w postaci np. www.adres.pl/projects/art161,ciekawa-realizacja.html

czyli chciałbym, żeby wszystko działało tak jak dziala do tej pory w cake. mam kontroler np. project w nim akcje view.
daje tak www.adres.pl/projects/art161,ciekawa-realizacja.html to chce wybrac rekord z bazy o id 161.

słówko art jest nie istotne, podobnie wartosc po przecinku. wystarczy zwykla zabawa z routerem?

pozdr.

2

Odp: Zmiana urli

Pierwsza mysl ...
config/bootstrap.php - podzielenie stringa z $_GET wyrazeniem regularnym na opdowiednie atomy, potem przepisanie na nowo zawartosci $_GET tak zeby wywalic nieporzadane elementy np "art" i",ciekawa-realizacja.html".

problemy jakie mozesz napotkac to :
- nie dzialajca paginaca ( ale spoko , mamy juz na forum experta od tego ;-)
- zabawa w pisanie takich reg'ow zeby to cuś działało dla każdej akcji i każdego kontrollera - czyli pewnie po 1 regu na akcje...
- przepisywanie argumentow do tablicy _GET w takiej kolnosci w jakiej byly w urlu ( raczej nie problem, ale trza o tym pamietac)

Druga mysl ...
url'e takie jak zaporponowales , akcje oczekujace jednego parametru , ktory kazdorazowo w akcji przeksztalcasz zapodana  wartosci argumentu do dogodnej formy ....

Mysl 3-cia , rozwiazanie najprostsze ... urle troche inne..
do kazdego arta pobierasz jego nazwe za pomoca inflectora z nazwy ( w modelu) robisz sobie sluga ... czyli np ciekawa-realizacja i dodajesz do niego ".html" - wychodzi ciekawa-realizacja.html

urle tworzysz nastepujaco www.adres.pl/projects/161/ciekawa-realizacja.html

przykladowa akcja

public function index($id) 
{

}

drugi parametr zostanie pominiety przy wywolaniu takiej akcji, aczkolwiek ciagle bedzie sie mozna do niego dostac  ze srodka akcji .

problemy jakie mozesz napotkac...
ciezko powiedziec, ja nie mam zadnych jak narazie.

Ostatnio edytowany przez robal77 (2009-07-29 16:29:50)

3

Odp: Zmiana urli

jestem dosyć słaby z angielskiego, więc mam pytanie.

do czego służy

Router::connectNamed(false, array('default' => true)); 

i dziala tak jak chce.

http://localhost/cake/products/view/1,jkhjkh.html

- zupelnie ignoruje to ",jkhjkh.html". nie wiem czy to poprawne, ale dziala tak jak chcialem. jeszcze nie wiem co z paginacja, ale pomysle pozniej.
czy to dobre rozwiazanie?

pozdr.

4

Odp: Zmiana urli

no coz z jednej linijki kodu ciezko wywnioskowac do czego moze ona byc ... wyciagnales jak z routera, czy z jakiejs wersji nightly ? da namiar na plik to lookne.

5

Odp: Zmiana urli

przepraszam,
już daje linka.
funkcję wziąłem z dokumentacji Cake

http://api.cakephp.org/class/router#met … nnectNamed

6

Odp: Zmiana urli

to po koleji ...

Specifies what named parameters CakePHP should be parsing. The most common setups are:
Okresla ktore "nazwane" parametry powinny byc parsowane ( chyba im chodzilo o passed - przekazane a nie parsed - parsowane)  przez famework. Najszczestsze konfiguracje to : 

Do not parse any named parameters:
Nie pasuje zadnych parametrow

Router::connectNamed(false);

Parse only default parameters used for CakePHP's pagination:
parsuje tylko domysle parametry uzywane w paginacji

Router::connectNamed(false, array('default' => true));

Parse only the page parameter if its value is a number:
parsuje tylko parametr "page" o ile jest on liczba

Router::connectNamed(array('page' => '[\d]+'), array('default' => false, 'greedy' => false));

Parse only the page parameter no mater what.
parsuje tylko parametr "page" bez wzgledu na to jaka jest jego wartosc

Router::connectNamed(array('page'), array('default' => false, 'greedy' => false));


itd.
Tak bez grzebania w kodzie... wyglada na to ze ta metoda jest uzywana do okreslenia jakie parametry maja byc przekazane do akcji  ( uwzgledniajac jakies proste reguly walidacji np :
Router::connectNamed(array('page' => '[\d]+'), array('default' => false, 'greedy' => false));

/controller/action/page:2 - bedzie przekazane
/controller/action/page:a - do kontrolera/ metody paginate zostanie przekazana pusta wartosc).

Radze  troche poeksperymentowac zanim zaczniesz tego stosowac,
stworz sobie jakas akcje ktora oczekuje kilku argumentow, w tym tzw named , sprawdz z paginacja.... itp

Ostatnio edytowany przez robal77 (2009-07-29 17:47:26)