Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MVC] mapowanie
Forum PHP.pl > Forum > PHP > Object-oriented programming
NorthPole
Witam

Zwracam się do was z prośbą o pomoc w wyciągnięciu mnie z totalnego zapętlenia związanego z mvc.
Piszę szkielet podpatrując gotowe rozwiązania. Ale gnębi mnie problem powiązania mapowania urli z wyborem widoku.
Zrobiłem to dość tradycyjnie to znaczy url wygląda tak: /kontroler/akcja/klucz/wartość/...
I wszystko działa frontKontroler zbiera żądanie i przenosi mnie do kontrolera akcji który wybiera akcję a ona ewentualnie korzysta z dalszych parametrów z urla.
Akcje są metodami wywoływanymi przez obiekt kontrolera. Więc pisząc jakiegoś prostego cms'a projektuje wszystkie możliwe akcje i przydzielam im widoki.

No i właśnie tutaj mam problem tak rozumując dostaje koszmarnie długi adres np:
/kontroler_galeria/akcja_pokaz/klucz_co/wartość_id-galerii/
Przecież tylko dwa ostatnie elementy mogą być modyfikowane podczas aktualizacji strony - administrator tworzy sobie nową galerią, która ma przypisany id-galerii.
Jak to skrócić?

Ja wiem, że to kwestja "implementacji”, ale chciałbym się dowiedzieć jak to u was wygląda, jak radzicie sobie z aktualizacją - rozbudową - dodawaniem podstron?

Gdzieś pewnie w moim rozumowaniu tkwi błąd ale kurcze nie wiem gdzie?
menic
Ale w czym ci ten dlugi adres przeszkadza?
NorthPole
Cytat(menic @ 4.06.2007, 12:07:42 ) *
Ale w czym ci ten dlugi adres przeszkadza?

No niby w niczym, ale w czasach "przyjaznych urli" taka zbitka jest przerażająca poza tym nurtuje mnie jeszcze problem wyciągania informacji z modelu dla wyświetlanego widoku.

Takie elementy strony jak title, keywords, description powinny być zapisane w bazie dla każdego widoku-strony, więc akcja musi zasysać informacje z modelu w zależności od tego czy są jakieś dodatkowe parametry w urlu czy nie (jak nie ma to domyślny widok z title,keywords itd, a jak są to odpowiednio dla wybranego id). Więc jak to trzymać w bazie jak powiązać żądanie z wyborem danych dla widoku?
dr_bonzo
/kontroler_galeria/akcja_pokaz/klucz_co/wartość_id-galerii/

nie piszesz slow jak 'kontroler', 'akcja' i masz

/galeria/pokaz/klucz_co/wartość_id-galerii/

potem (patrz Routes w Zend FW, RoR i chyba tez innych)

mozesz zamienic

/galeria/nazwa_galerii_galerii -> kotroler = galeria, akcja = pokaz, a po nazwie szukasz odpowiedniej galerii
Ludvik
Nie rozumiem tylko po co w tym URL znajdują się takie słowa jak kontroler, akcja, klucz... Przecież to nikomu się nie przyda. Jak usuniesz to url wygląda już ładniej:

/galeria/pokaz/id/2/

Możesz też się pozbyć tego "id" mapując kolejno elementy ścieżki na parametry. Musisz stworzyć tylko odpowiednią mapę do tego (bądź innego) schematu.

/kontroler/akcja/1/2/3/... Gdzie mapujesz 1 => nazwa, 2 => coś innego itd... Wymagana jest kolejność odpowiednia, ale wtedy URL wygląda jeszcze lepiej. Dzięki temu możesz stworzyć URL w stylu:

/galeria/pokaz/zdjecia_z_wakacji

Tak jak to ma miejsce na stronach php.pl.
NorthPole
Cytat(dr_bonzo @ 4.06.2007, 12:45:54 ) *
nie piszesz slow jak 'kontroler', 'akcja' i masz
/galeria/pokaz/klucz_co/wartość_id-galerii/

Napisałem tak tylko dla jasności, oczywiście nie dodaję słów kontroler czy akcja winksmiley.jpg

Cytat(dr_bonzo @ 4.06.2007, 12:45:54 ) *
mozesz zamienic
/galeria/nazwa_galerii_galerii -> kotroler = galeria, akcja = pokaz, a po nazwie szukasz odpowiedniej galerii

No właśnie jak to zamienić? Dlaczego akcja to pokaz a nie "nazwa_galerii_galerii"?




Cytat(Ludvik @ 4.06.2007, 12:49:24 ) *
Możesz też się pozbyć tego "id" mapując kolejno elementy ścieżki na parametry. Musisz stworzyć tylko odpowiednią mapę do tego (bądź innego) schematu.

OK taki schemat skraca urla pomyślę nad tym, chociaż trochę boję się zachowania kolejności podczas generowania linków.
A co do mapy, jakie informacje w niej trzymacie. Ja mam:
id
title
keywords
description
parent - do tworzenia hierarchii, nawigacji
tpl - do zasysania odpowiedniego szablonu

Nie wiem czy nie mieszam tutaj kilku rzeczy, ewentualnie czy nie powinienem w takiej mapie trzymać jeszcze czegoś?


::EDIT::

dr_bonzo -> dziękuję!!!

zadanie odrobiłem i teraz wiem że namieszałem
ale mi głupio

Jeszcze raz dziękuję Wszystkim
Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.