Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wywoływanie kontrolera w kontrolerze
Forum PHP.pl > Forum > PHP > Object-oriented programming
markonix
Mamy metodę, która wyświetla np. listę znajomych dla usera.
Metoda user/friends.

Jeżeli brak argumentu to zalogowanego, można też na końcu dodać id: user/friends/123.

Chciałbym tę listę wywołać z zupełnie innego kontrolera czyli wywołać metodę innego kontrolera.
Ogólnie dużo ludzi grzmi że to zaburza MVC no ale jak inaczej do tego podejść?

Chcę zrobić aby po wejściu na zupełnie inny link:
u/id_user/friends
Była wywoływana lista znajomych dla id_user.

Mam już zrobiony routing na metodę "action" czyli metodę kontrolera, która wyciąga id_user (jest troszkę sformatowane więc nie mogę zrobić bezpośredniego routingu).

  1. public function action($function_name, $url_string)
  2. {
  3. $uid = $this->get_uid_from_url($url_string);
  4. redirect('user/'. $function_name .'/'. $uid); // a chciałbym coś w deseń $user->$function_name($uid)
  5. }


Przekierowanie jest ok ale modyfikuje URL, a chciałbym zachować link w formacie nazwa_usera/akcja wzorując się na facebook.
Inaczej mógłbym zrobić parę ifów i wywoływać odpowiednie modele i widoki ale to bardzo brzydkie - powtarzanie kodu i też po prostu dużo by tego było.

FW: CodeIgniter.
cudny
poczytaj o forward
markonix
http://stackoverflow.com/questions/4841951...-in-codeigniter
?

No dużo mi to nie pomogło.
cudny
To poszukaj w dokumentacji Zenda.
Nie wiem czy w ogóle dobrze zrozumiałem twoje pytanie, ale chyba chodziło o przekierowanie na inny kontroller czy akcję bez zmiany url, to właśnie możesz zrobić za pomocą _forward()
markonix
Ale ja programuje w CodeIgniter.
Pytałem ogólnie w koncepcji MVC czy wolno tak robić, a jeżeli tak to już rozwiązanie potrzebowałbym w CI.

Skoro jest takie rozwiązanie w Zendzie to wydaje mi się, że można tak robić, przydałoby się coś takiego teraz w CI.
cudny
Sorki tongue.gif nie zauważyłem nazwy frameworka.
Ogólnie to forwardowanie czy zaczytanie innej akcji w żadnym wypadku nie zaburza MVC bo jeśli by tak było gryzło by się to z podstawami Obiektowości ponieważ jeśli masz już coś zrobione to po co robić to jeszcze raz ( klonować kontroller czy akcje ).
Nie znam metod używanych w CI ale jeśli nie znajdziesz nic podobnego do _rorward() z ZF w CI to spróbuj dostosować model tak aby wywoływać w kontrolerze tylko jedną linię i w akcji kontrolera zaczytać content innej akcji. Coś w stylu include('other_action.phtml') -> znajdź jakąś metodę w CI tongue.gif to tylko przykład smile.gif
wNogachSpisz
Odpowiedź to moduł HMVC do Coddignitgera
Wtedy wywołanie metody z kontrolera modułu wygląda tak:

  1. $output_data = modules::run('module/controller/function');


Nie wiem jak mogłem bez tego żyć smile.gif
markonix
Polecasz jakąś konkretną bibliotekę uzupełniającą o tą funkcjonalność?
wNogachSpisz
W PyroCMS jest to pięknie użyte, pobierz i poczytaj kod.
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.