Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Automacko ucitavanje Controllera

[es] :: PHP :: Automacko ucitavanje Controllera

[ Pregleda: 1954 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ivanichemil
nezaposlen
pancevo,srbija

Član broj: 240622
Poruke: 10
*.dynamic.isp.telekom.rs.



+2 Profil

icon Automacko ucitavanje Controllera24.09.2011. u 00:06 - pre 152 meseci
Zdravo svima, imam mali problem sa MVC-om koji ja pravim cisto radi usavrsavanja kocepta MVC strukture...

Uspeo sam da napravim vezu izmedju Controllera->Modela->View dela da komuniciraju...
Te 3 klase se nalaze u libs direktorijumu.
Imam APP direktorijum sa MVC strukturom Model,View,Controller

E sada kako kada napravim Blog Controller da se on automacki ucitava?
Nemogu sa __autoload jer svaku klasu moram da instanciram zasebno...
Jel postoji neko resenje da svaka nova moja klasa tipa blog da se automacki instancira ili sta vec. da nemoram ja to da definisem...
Neznam dali me razumete... U APP/Controller/ napravim blog.php i da se on automacki instancira/includuje
Jos uvek ucim MVC tako da moj controller izgleda iz 3 reda koda koji sadrze instanciranje modela i vew dela.

Code:

class Controller {
     
       public $Model;
       public $View;
    
     
    function __construct(){
            $this->Model = new Model();
        $this->View  = new View();
    }

}



Code:

class View {
    
    public function Display($name, $data=null){
        require_once(APP_PATH.'view/'.$name.'.php');
    }

}


Ovo je bas nesto pocetnicko, ali ako mozete da mi pomognete bicu vam zahvalan...
 
Odgovor na temu

Aleksandar Ružičić
Software Architect, Appricot d.o.o.
Beograd

Član broj: 26939
Poruke: 2881

Jabber: krckoorascic@gmail.com
Sajt: krcko.net


+44 Profil

icon Re: Automacko ucitavanje Controllera24.09.2011. u 02:51 - pre 152 meseci
Ne razumem te bas, zasto ne mozes da koristis __autoload? Daj primer tog Blog kontrolera...

i btw, kaze se automatski a ne automacki.. (dobronamerna primedba)
 
Odgovor na temu

ivanichemil
nezaposlen
pancevo,srbija

Član broj: 240622
Poruke: 10
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Automacko ucitavanje Controllera24.09.2011. u 05:23 - pre 152 meseci
Ok moja greska zurio sam...

Pazi kada ja u samom glavnom kontrolleru definisem.

Code:

class Controller {
     
       public $Model;
       public $View;
    
     
    function __construct(){
            $this->Model = new Model();
        $this->View  = new View();
    }

   public function getPost(){
    $data = $this->model->getAllPost();
    $this->view->display('blog');
  }

}


e to sve radi super izlistam ja sa foreach petljom sve u view delu....

E sada ja zelim da sve moje Controlere smestam u APP/Contorller dir.. A ne u samoj glavnoj contoller klasi...

-App
---Controller
------ blog.php <<---Treba ovde da definisem controllere kao sto je ovaj blog.php
---View
------blog.php
---Model

-Libs
---Controller.php <<---getPost() funkcija je ovde definisana a trebala je gore u app/controller
---Model.php
---View.php

Kako ja sada da povezem da mi on cita sve nove classe koje koje definisem u app/controller
Ja direktno kada definisem kao gore onda radi.. Kako da povezem i da citam taj folder... VIew deo mi je laksi dok samo to sa controlerima me zeza


[Ovu poruku je menjao ivanichemil dana 24.09.2011. u 07:41 GMT+1]
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.adsl-a-3.sezampro.rs.



+2 Profil

icon Re: Automacko ucitavanje Controllera24.09.2011. u 12:17 - pre 152 meseci
Ako sam te dobro razumeo, problem je da ucitas klase?
Autoload ti resava taj problem ako ga definises kako treba.

Pogledaj ovaj clanak mozda ti pomogne u resavanju problema
http://www.sitepoint.com/how-t...rt-3-keywords-and-autoloading/


Sad nesto razmisljam, ti verovatno mislis na front controler? Znaci da u index.php pokrenes neku klasu koja bi prepoznala da treba da ucita blog kontroler?
baci pogled na ovaj link mozda posluzi svrsi http://java.sun.com/blueprints/patterns/FrontController.html

p.s. nisi dao dovoljno informacija, ako bi mogao da postujes index.php i blog klasu. Malo bi bolje sagledali problem.
---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

ivanichemil
nezaposlen
pancevo,srbija

Član broj: 240622
Poruke: 10
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Automacko ucitavanje Controllera24.09.2011. u 16:01 - pre 152 meseci
POgodio si sta me muci...

Front Controlleri me muce, ocu da automacki ucitava sve definisane klase. da nemoram u index ili bootstrap non stop da instanciram svaki frontController....

$blog = new Blog;
$Sajt = new Sajt;

ITD, ITD, ITD

 
Odgovor na temu

ivanichemil
nezaposlen
pancevo,srbija

Član broj: 240622
Poruke: 10
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Automacko ucitavanje Controllera25.09.2011. u 03:40 - pre 152 meseci
Googlao sam i gledao druge primere... koliko sam shvatio treba mi ROUTING koji ce mi instancirati sve moje nove kontrolere

Kojim postupkom se to pravi? I dali je to resenje koje meni treba?
 
Odgovor na temu

_ikac
Ivan Raznatovic
Beograd

Član broj: 290105
Poruke: 54
*.dynamic.isp.telekom.rs.



+1 Profil

icon Re: Automacko ucitavanje Controllera25.09.2011. u 05:24 - pre 152 meseci
Ne bavim se tom tematikom MVC Aplikacije, Sajtovi itd... Koristim php za druge svrhe ali mislim da ti mogu dati predlog...

Tvoj problem je neznas kako da ucitas nove kontrolere iz aplikacije...

Pazi Routovanjem mozes

http://www.tvojsajt.com/controller/method/

Na taj fazon se redi mislim... samo sto tebi treba da se sve to u index.php sve odvija i koliko mislim treba ti klasa ili funkcija koja ce da ucitava
sve kontrolere iz tvog direktorijuma APP/CONTROLLERS/ i instancira.
nesto slicno kao autoload samo sto ovde ucitavas odredjeni kontroler

if(file_exists(bla,bla){
require_once($controlerName);
$contr = new $controlerName;
}

Neki taj fazon mislim da ide, ali sada kako ti da posaljes ime kontrolera u url to vec ne znam

http://www.tvojsajt.com/imeKontrolera/method/

Bilo bi lepo da neko odg kako proslediti ime kontrolera u URL dali $_GET ili kako vec jer i mene zanima...

ja bi tako odradio taj postupak...

Koliko vidim tebi treba primer koda a ne ideja....
 
Odgovor na temu

b0ris
Boris Vujicic
Senior PHP programer
Beograd

Član broj: 126587
Poruke: 158
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Automacko ucitavanje Controllera25.09.2011. u 14:03 - pre 152 meseci
Procedura dobijanja sadrzaja preko HTTP protokola je
1. request header (koji salje klijent) - PHP $_SERVER promenljiva sve to lepo sumira http://php.net/manual/en/reserved.variables.server.php
2. response header (koji salje server)
3. response body (koji salje server)

Razumevanje ovog procesa dovodi do resenja tvoje dileme. Znaci kad klijent posalje zahtev, na serverskoj strani taj zahtev se hvata (za obradu takvog zahteva kreiraj klasu recimo Request ili UrlHandler kako god zelis).
Zatim obradi zahtev logikom koja je karakteristicna za aplikaciju.
Za MVC pattern je karateristicno da u URL imas prvo ime kontrolera zatim ime metode, i na kraju parametre.

Front Controller ti sluzi da uhvatis request od klijenta i iz njega izvuces controler, metodu koju pozivas i parametre, to sve povezes sa zeljenim kontrolerom i pozoves dispatch.

U njagrubljem smislu to bi izgledalo ovako:
Code:

class Request{
  private $controller = '';  // Ovde mozes i postaviti i defaultni kontroler.
  private $method = '';  // Ista prica kao i za kontroler
  private $params = '';

  function __construct(){
    // Recimo nesto ovako: www.example.com/blog/show/id/1
    list($controller, $method, $params) = explode('/', $_SERVER['QUERY_STRING']);
    $this->controller = $controller;
    $this->method = $method;
    $this->params = $params;
  }
  
  function getController(){
    return $this->controller;
  }

  public function getMethod(){
    return $this->method;
  }
}


Posto to sve imas u Request objektu znaci da si spreman da ides dalje. Ovde je naravno potrebno mnogo vise paznje i sigurnosti.
Dalje nastavljas tako sto kreiras klasu controller kojoj prosledjujes request.
Code:

class Controller{
  ....
  
  public function __construct(Request $request){
    $this->request  = $request;
  }

  public function dispatch(){
    $controller = new $this->request->getController(); // Recimo nesto ovako bi kreiralo controller Blog
    return $controller->$this->request->getMethod(); // Na ovaj nacin bi bila pozvana metoda show.
  }
  .....
}


Zatim kad se to lepo sve nalazi u kontroleru, unutar index.php instanciras front controller. Front controler to sve poveze i pozove dispatch.

Ovo je nesto najgrublje moguce.

Kao sto vec pretpostavljas imao bi i klasu Response, koja bi posatavila header i body i na taj nacin bi ispostovao u potpunosti protokol.
Response klasa bi bila zaduzena za view deo.
Nadam se da sam uspeo da priblizim :) Izvinjavam se ako sam negde gresio u sintaksi nisam bas obracao paznju na kod.

p.s. A ni na pravopis ocigledno :S

[Ovu poruku je menjao b0ris dana 25.09.2011. u 17:08 GMT+1]
---------------------------------------------------------------------
Just do it.
 
Odgovor na temu

ivanichemil
nezaposlen
pancevo,srbija

Član broj: 240622
Poruke: 10
*.dynamic.isp.telekom.rs.



+2 Profil

icon Re: Automacko ucitavanje Controllera26.09.2011. u 17:04 - pre 152 meseci
Hm ukapirao sam kako funkcionise F.COntroller i kako grabim novi kontroler i metode

http://www.mojsajt.com/index.php/controller/method

Ali pazi ovo sam iz svoje glave nekako uradio, znaci grubo do bola ali radi. Naravno da cu ja to srediti i prosiriti ovo je samo test.

najvecu ulogu ima funkcija EXPLODE koja mi razdvaja URL do "/" slasha

Code:

 $url = explode('/', $_SERVER['REQUEST_URI']);
 $controller = new $url[3];
 $controller->$url[4]();


Ako ukucam
http://www.mojsajt.com/index.php/blog
poziva se klasa blog i instancira se u new $url[3]

metodu pozivam
http://www.mojsajt.com/index.php/blog/login
$controller->$url[4]();
Proverim dali metoda postoji ako postoji onda je pozivam u suprotnom bacam Exception

i sada to stvarno radi bez problema, explode je ucinio cuda ovde...

Sada sta sve Front C. mora da sadrzi u sebi...
Mislim $_GET, $_POST

Verovatno cu morati da uradim zasebno za sve metode ako je $_GET i sve metode ako je $_POST
 
Odgovor na temu

[es] :: PHP :: Automacko ucitavanje Controllera

[ Pregleda: 1954 | Odgovora: 8 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.