Mam URL który wygląda tak: http://cake/aktualnosci/tutaj-tytul-aktualnosci
Ma to na celu oczywiscie zrobienie bardziej NiceURLs niz http://cake/news/1
Plik app/config/routes.php
<?php ?>
W kontrolerze NewsController mam metodę showNews, która odpowiada za pobranie odpowiedniego newsa z modelu, na podstawie meta_name:
<?php function showNews() { $news = $args[0]; $this->set('news', $this->News->findByMeta_Name($news)); } ?>
Jak do tej pory, wyszsko gra.
Kolejna sprawa jest taka, że URLe http://cake/pages/kontakt, http://cake/pages/o-nas nie wygladaja OK, a bardziej OK wygladaja URLe http://cake/kontakt, http://cake/o-nas. Ten problem rozwiazalem kierujac caly nieznany ruch na kontrole Pages:
Plik app/config/routes.php
To ostania regułka, więc wszystko co nie zostanie złapane do innych konrolerów pójdzie do kontrolera Pages, metody subpage, która dalej decyduje co pokazać.
<?php ?>
Tu właśnie pies pogrzebany został :)
Pojawił się URL http://cake/oferta/dla-firm. Jest kontroller Offers, jest Routing z oferta/ na kontroller OffersController. I dostaję błąd: You are seeing this error because the action dlafirm is not defined in controller OffersController. Ha, ale metoda dlafirm jak najbardziej istnieje w OffersController.
Dalej, przszukałem http://groups.google.com/group/cake-php/ i znalazłem info, że można rozwiązać problem stosując brzydki hack w pliku app/config/bootstrap.php. Hack polega na przepisaniu $_GET['url'] i pozbyciu się myślników z URLa:
Hack oczywiście robi swoje, i OffersController zaczyna widzieć metodę, wszystko działa.
<?php $_GET['url'] = r('-', '', $_GET['url']); ?>
Działa, do momentu kiedy nie wrócimy do http://cake/aktualnosci/tutaj-tytul-aktualnosci. Po zastosowaniu hacka, ten URL staje się oczywiście http://cake/aktualnosci/tutajtytulaktualnosci (wewnątrz aplikacji) i nie zostaje w bazie znaleziony odpowiedni rekord.
Zapisanie w bazie wersji bez myślników jest o tyle problematyczne, że wykorzystuję pole meta_name do budowy linków. Można ewentulanie za każdym razem w locie tworzyć meta_name na podstawie tytułu newsa /artykułu/whatever ale co z sytuacją, kiedy nie będzie się to działo automatycznie, tylko dam możliwość storzenia meta_name poprzez panel administracyjny. Wtedy tytuł newa może być "Zapraszamy do reklamy" a odpowiadający mu meta_name "to-bardzo-fajny-news".
Jakieś pomysły, co zrobić z zainstniałą sytuacją? Nie znam cakePHP super-świetnie. Do tej pory poznawałem go w domowym zaciszu testując. Prawdziwe problemuy rodzą się właśnie w takich real-life sytuacjach.
pozdr.