Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Znów Route

Witam,
Proszę, podpowiedzcie, dlaczego tak jest:

Mam:
Router::connect('/:action/*', array('controller' => 'index'));
Dzięki temu, mam jeden kontroler i wiele akcji, np.: galeria, oferta itd...
Nie muszę robić dla każdego url'a osobnego konrolera.

To działa, tylko kiedy wpiszę strona.pl/galeria/ ( znak / po galeria ), skrypt działa dziwnie - niby widok jest dalej galerii, ale slider, który był w nagłówku ( flex slider ) już nie działa.

Tak samo, gdy wpiszę strona.pl/galeria/cos_tam - znów złamany widok - jak go przekierować na 404 ?

Dziękuję.

PS:
Dodatkowo teraz nie działa mi strona.pl/admin, zapewne przez Router::connect('/:action/*', array('controller' => 'index'));.

Dopisanie tej linii Router::connect('/', array('controller' => 'admin', 'action'=>'index')); nic nie zmienia.Ten post został edytowany przez Autora dnia 27.06.13 o godzinie 14:17
Bartek Naski

Bartek Naski CakePHP developer

Temat: Znów Route

kurde, nic nie kapuję z tego co napisałeś :P

przyjemniej i przejrzyściej jest zrobić sobie kilka kontrolerów, a do connecta dopisz sobie jeszcze pass i regułę, będzie bezpieczniej. choć edytuję to i poczytałem 3x to i tak nie skapowałem...
na wszelki wypadek masz 3 przykłady może ci rozjaśnią:
Router::connect('/sliderphoto/:id-:size.jpg', array(
'controller' => 'admsliders',
'action' => 'viewphotos'), array(
'pass' => array('id', 'size'),
'id' => '[0-9]+', 'size' => '[a-z]{1,}'));
Router::connect('/:slug', array('controller' => 'sites', 'action' => 'display'), array('pass' => array('slug')));
Router::connect('/changelang/:code', array('controller' => 'sites', 'action' => 'changelang'), array('pass' => array('code'), 'id' => '[a-z]{2}'));

ok chyba zatrybiłem.
sprawdź w sliderze czy twoje obrazki nie idą po /index/akcja/foto
oraz czy twój router nie blokuje widoku po controler/akcja - tak jakby nie było routera ustawionego :PTen post został edytowany przez Autora dnia 28.06.13 o godzinie 03:33
Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Znów Route

Dziękuję.

Sądzisz, że dla prostej strony, lepiej napisać 10 kontrolerów ? Pewnie ma to zalety, choć ja szukałem rozwiązania na 1 kontrolerze.

Generalnie:
// Jest OK ( strona.pl/oferta, strona.pl/kontakt, strona.pl/o_nas )
// Jeden kontroller, wiele akcji .
Router::connect('/:action/*', array('controller' => 'index'));

Natomiast, nie zadziała to:
strona.pl/admin
// Błąd - "Nie ma akcji admin w IndexController" (ale ja chcę dostęp do kontrolera Admin ).
Bartek Naski

Bartek Naski CakePHP developer

Temat: Znów Route

Router::connect('/admin/*', array('controller' => 'admin')); :P

np: obrazki niech robi kontroler obrazki, tak jest łatwiej :) jak masz wszystko w jednym kontrolerze to potem ciężko go rozwijać.Ten post został edytowany przez Autora dnia 28.06.13 o godzinie 13:33
Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Znów Route

" Router::connect('/admin/*', array('controller' => 'admin')); :P " :(((

Teraz działa routing do admina, tylko że skrypa wpada teraz w pętle po wpisaniu strona.pl/admin .
Kontroller admin ma metodę, która sprawdza czy zalogowany jest user, jak nie, redirect na strona.pl/admin/login

I ten route, który podałeś robi teraz pętle, aż mi localhosta w końcu wysadziło...
Bartek Naski

Bartek Naski CakePHP developer

Temat: Znów Route

heh...
wyobraź sobie że router to taka funkcja if tylko inaczej napisana, jeżeli wpiszesz w routerze:
/admin/* to /admin pominie a /admin/, /admin/login, /admin/coś tam pójdzie w contoller admin/index
* oznacza dowolny ciąg tekstowy, więc jeżeli /admin/login i /admin/cośtam kierują do /admin/index a /admin/index w kontrolerze kieruje do /admin/login to masz pętę....
określ reguły w routingach i będzie grało
Konrad Kluźniak

Konrad Kluźniak Webdeveloper /
Designer

Temat: Znów Route

Trochę się tym bawiłem, generalnie miałem problem z kodem, ale zmiana:

Router::connect('/admin/*', array('controller' => 'admin'));
na
Router::connect('admin/*', array('controller' => 'admin'));
pomogła. Nie wiedziałem, że ten slash ma znaczenie.
Dokumentację wertowałem 2 dni, ale tego nie wiedziałem - i do tej pory nie wiem dlaczego :)
Bartek Naski

Bartek Naski CakePHP developer

Temat: Znów Route

/ to punkt startu od wwwroot, brak slash to start z punktem odniesienia od lokalizacji w jakiej się znajdujemy w danym momencie przeglądania witryny, np:
"/admin" to zawsze adres www. domena. pl/admin i żaden inny, a:
"admin" to może być www. domena. pl/admin jak i www. domena. pl/dział/katalog/misiek/wojtek/admin
różnica niewielka :P

jeżeli szedłbym twoim rozwiązaniem to zrobiłbym to tak:
w najprostszej wersji:
Router::connect(
'/admin/:action/*', array('controller' => 'admin')
);Ten post został edytowany przez Autora dnia 02.07.13 o godzinie 21:47

Następna dyskusja:

Znów save ale inaczej.




Wyślij zaproszenie do