1

Temat: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

Witam.

Piszę CMS, którego sercem jest kontroler PagesController (który w założeniu ma działać niejako front-controller). Model Page bazuje na TreeBehavior oraz drzewiastej strukturze slugów w postaci unikalnej ścieżki do danej strony.

- aktualnosci (slug: aktualnosci)
- produkty (slug: produkty)
  - produkt 1 (slug: produkty/produkt-1)
  - produkt 2 (slug: produkty/produkt-2)

Do tego wszystkiego mam podpięty route w postaci:

Router::connect(
    '/:path',
    array('controller' => 'pages', 'action' => 'view'),
    array(
        'pass' => array('path'),
        'path' => "(?!admin/)[\w/-]+",
    )
);

tak, aby linki do strony były w postaci:

http://domena.pl/produkty/produkt-1

A teraz mój problem:

Nie mogę wywołać strony z parametrami np.

http://domena.pl/produkty/aktywne

... ponieważ taki URI spowoduje szukanie strony o slugu "/produkty/aktywne" (będzie 404) zamiast znaleźć stronę "/produkty", a parametr "[0] => aktywne" wrzucić do Controller::params['named'].

Macie jakąs radę jak to rozwiązać, żeby Router odpowiednio linkował do kontrolera, a jednocześnie poprawnie obsługiwał parametry passed i named zgodnie z konwencją przyjętą w ścieżce?

Od razu mówię, że nie wiem jakie nazwy parametrów będą się pojawiać w adresie URI, bo to będzie zależne od wtyczek, zatem podanie na sztywno nazw parametrów w Router::connect() odpada.

Pomóżcie smile

Ostatnio edytowany przez prgTW (2010-02-20 02:25:27)

2

Odp: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

Wydaje mi się, że jeśli przy definiowaniu nowego routa podasz w pierwszym parametrze url (produkty/aktywne)  na sztywno i przekierujesz go do odpowiedniego controllera i metody to będzie śmigać. To by wyglądało jakoś tak :

Router::connect('produkty/aktywne', array('controller' => 'pages', 'action' => 'view', 'aktywne'));

Oczywiście 'view' to metoda odpowiedzialna za wyświetlanie strony a 'aktywne' - parametr

Ostatnio edytowany przez bajki (2010-07-02 22:44:29)

3

Odp: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

problem juz dawno naprawilem - zmienilem "delimiter" ze slasha na przecinek

nie zrozumiales chyba dokladnie o co mi chodzilo, edycja strony w CMSie zmienia slug wiec statyczny route by byl automatycznie niewlasciwy
wuntek do zamkniecia, problem rozwiazany

4

Odp: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

Aha no tak, dynamiczny slug zmienia postać rzeczy (a ten z przykładu na taki nie wyglądał) wink

5

Odp: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

Router::connect(
    '/:path',
    array('controller' => 'pages', 'action' => 'view'),
    array(
        'pass' => array('path'),
        'path' => "(?!admin/)[\w/-]+",
    )
);

nie wyglądał powiadasz? a ':path' to co wink

6

Odp: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

miałem na myśli raczej

http://domena.pl/produkty/aktywne

wink
ok nieistotne

7

Odp: Problem z routingiem, potrzebuję niejako dwuznacznych ścieżek

Od razu mówię, że nie wiem jakie nazwy parametrów będą się pojawiać w adresie URI [...], zatem podanie na sztywno nazw parametrów w Router::connect() odpada.

Zmiana delimitera na przecinek zlikwidowała problem, ostatni slash już wtedy poprawnie rozdziela parametry w URI