Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Wywołanie kontrolera
cer98
post
Post #1





Grupa: Zarejestrowani
Postów: 126
Pomógł: 5
Dołączył: 17.07.2011

Ostrzeżenie: (0%)
-----


Mam problem. Otóż nie mogę wyważyć w jaki sposób odpalać te kontrolery we frameworku, mvc. Pierwszy sposób zawodzi, gdy znajdzie się w Managerze metoda z walidacją, ponieważ muszę użyć instrukcji if by sprawdzić, czy została wywołana i jeśli tak wywołać również walidację. Natomiast druga zawodzi w momencie, gdy ktoś chce złamać zabezpieczenia, bowiem metodę widać w adresie strony. Proszę o rady. Przejrzałem frameworki, ale nie znalazłem odpowiedzi.


Adres:
  1. index.php?module=user&action=shownotactive&other=1_2



1) metoda pierwsza

  1. class UserController{
  2.  
  3. public function __construct($action, Array $other){
  4.  
  5. $usermanager = new UserManager;
  6. $usermanager->$action($other);
  7.  
  8. }
  9.  
  10. }



2) metoda druga

  1.  
  2. class UserController{
  3.  
  4. private $index;
  5.  
  6. public function __construct($action){
  7.  
  8. $usermanager = new UserManager;
  9. $this->index->$action;
  10.  
  11. }
  12.  
  13. public function set(){
  14.  
  15. if(isset($this->index)){
  16.  
  17. $usermanager->showPanel();
  18.  
  19. }
  20.  
  21. if($this->index == 'shownotactive'){
  22.  
  23. $usermanager->shownotactive();
  24.  
  25. }
  26.  
  27. if($this->index == 'addnewuser'){
  28.  
  29. $usermanager->addnewuser();
  30.  
  31. }
  32.  
  33. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
bastard13
post
Post #2





Grupa: Zarejestrowani
Postów: 664
Pomógł: 169
Dołączył: 8.01.2010
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Metoda getRequest() powinna zwracać obiekt klasy Request, która zawiera informacje nt. aktualnego requestu, czyli jej budowa może wyglądać mniej więcej tak:
  1. class Request {
  2. private $_controllerName;
  3. private $_actionName;
  4. private $_params = array(); //dobrze byłoby, gdyby istniał podział na parametry przekazane za pomocą metody GET i POST
  5. public function getControllerName($default = 'index') {} //jeżeli nie został przekazany w url kontroler, to zostaje zwrócony domyślny
  6. public function getActionName($default = 'index') {} //analogicznie j.w.
  7. public function getParams($method = Request::ALL) {} //zwraca wszystkie parametry. Tutaj radziłbym zastosować jakieś consty do określenia czy wszystkie wysłane postem, getem, czy ogólnie wszystkie
  8. public function getParam($name, $default = null) {} //zwraca wartość parametry lub $default, gdy parametr nie został przekazany
  9. }

Oczywiście to tylko sugestia, bo można spokojnie to rozbudować. Dodatkowo pozostaje decyzja, czy parametry są przekazywane, czy sam obiekt dobiera się do nich z tablic globalnych. To samo tyczy się nazw akcji i kontrolera. Czy pobierać je wewnątrz obiektu klasy, czy może przekazywać. Jeżeli chcesz to wszystko ustawiać to raczej proponowałbym takie dane przekazywać w konstruktorze, a nie za pomocą seterów, ponieważ logika podpowiada, że po utworzeniu obiektu klasy request raczej nie powinien się zmienić.
Temat można rozwinąć, jeżeli zakładasz również obsługę kodu z linii poleceń. W takim wypadku doradzałbym wyciągnięcie klasy bazowej (abstrakcyjnej) wyżej i stworzenie Request_HTTP i Request_CLI lub coś w tym stylu.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 21:15