2016-07-26 15 views
0

Ich bin ein Java-Entwickler (Ich habe oft Spring MVC MVC Web-App in Java zu entwickeln) mit einer sehr litle Kenntnissen in PHP, und ich habe auf einem PHP-Projekt zu arbeiten, die CodeIgniter 2.1.3 verwenden.Wie genau funktioniert diese CodeIgniter-Controller-Klasse?

So habe ich einige Zweifel darüber, wie der Controller in CodeIgniter funktioniert.

1) Im Frühjahr MVC Ich habe eine Controller-Klasse mit einigen annotierten Methode, jede Methode behandeln eine bestimmte HTTP-Anfrage (die Annotation definiert die URL von der Methode behandelt) und den Namen der Ansicht, die angezeigt werden soll.

die offizielle Dokumentation von Lesen CodeIgniter es scheint mir, dass die Logik dieses Rahmens ziemlich anders: https://www.codeigniter.com/userguide3/general/controllers.html#what-is-a-controller

So ist es, dass CodeIgniter in zu verstehen scheint eine Klasse, die eine einzelne URL des Griffs Anwendung mit dem gleichen Namen des Klassennamens. Ist es richtig?

So habe ich diese Klasse:

class garanzieValoreFlex extends CI_Controller { 

    ..................................................... 
    ..................................................... 
    ..................................................... 

    function __construct() { 
     parent::__construct(); 

     $this->load->helper(array('form', 'url')); 
     $this->load->library(array('form_validation','session')); 
    } 


    public function reset() { 

     $this->session->unset_userdata("datiPreventivo"); 
     $this->load->view('garanziavalore/garanzie_valore_questionario_bootstrap',array()); 

    } 


    public function index() { 

     $this->load->model('Direct'); 
     $flagDeroga = "true" ; 

     $this->session->userdata("flagDeroga"); 

     $data = $this->session->userdata("datiPreventivo"); 
     $this->load->model('GaranzieValoreFlexModel'); 

     $data = $this->session->userdata("datiPreventivo"); 
     $this->load->model('GaranzieValoreFlexModel'); 

     $this->load->view('garanziavalore/index_bootstrap',$data); 
    } 

    public function back() { 

     $this->load->model('Direct'); 
     $flagDeroga = "true" ; 

     $this->session->userdata("flagDeroga"); 
      $data = $this->session->userdata("datiPreventivo"); 
      $this->load->model('GaranzieValoreFlexModel'); 
      //$this->load->view('garanziavalore/garanzie_valore_questionario_bootstrap',$data); 
      $this->load->view('garanziavalore/index_tornaIndietro_bootstrap',$data); 

    } 


    ..................................................... 
    ..................................................... 
    ..................................................... 

} 

Also, von dem, was ich habe zu verstehen, im Grunde dieses Controller Griff nur die HTTP-Anforderung zu der URL: http://MYURL/garanzieValoreFlex.

Also von dem, was ich verstehe, habe das Verfahren durchgeführt, wenn ich auf die vorherige URL zuzugreifen, ist der Index(), dass durch diese Linie:

$this->load->view('garanziavalore/index_bootstrap',$data); 

zeigen die garanziavalore/index_bootstrap.php Seite, ich fand in den Ansichten Verzeichnis meiner prohect (es ist ein Standard, der in die Ansichten Verzeichnis sein?)

ist es meine Argumentation richtig?

Wenn ja ich lade die Ansicht id vorbei auch die $ data Variable, die ich denke, ist das Modell die Daten, die auf der Seite angezeigt werden können, ist diese Variable durch abgerufen wird:

$data = $this->session->userdata("datiPreventivo"); 

Was genau macht diese Linie?

Der letzte Zweifel ist die andere zurück bezogen() Methode, die ich in der vorherigen Controller gefunden haben: es ist eine Methode der CodeIgniter CI_Controller Klasse oder etwas ganz individuelle vom Entwickler festgelegt, die auf dieser Anwendung arbeiten, bevor mich?

Antwort

1

Ein Controller kann mehr als eine URL verarbeiten und die Klasse garanzieValoreFlex ist ein Beispiel für eine solche Klasse.

Die URL http://MYURL/garanzieValoreFlex ruft die Methode index auf.

Die URLs http://MYURL/garanzieValoreFlex/back und http://MYURL/garanzieValoreFlex/reset rufen die Methoden back() bzw. reset() der Klasse auf. Diese beiden Funktionen sind benutzerdefinierte Erweiterungen für die erweiterte Klasse CI_Controller.

Codeigner (CI) URLs folgen dem Muster example.com/class/function/argument/ Die Funktions- und Argumentsegmente sind optional.

Wenn eine URL nur einen Klassennamen wie example.com/class verwendet, wird CI nach der index()-Methode suchen und diese aufrufen, sofern sie existiert. Wenn index() nicht existiert, erhalten Sie 404 Page Not Found Anzeige.

Ihre Argumentation über $this->load->view('garanziavalore/index_bootstrap',$data); ist korrekt. Es ist Standard, solche Dateien in die Ansichten Verzeichnis zu setzen. Optional können Unterverzeichnisse von Ansichten wie in /views/garanziavalore/ verwendet werden.

CI verwendet eine Dateistruktur, die verschiedene Klassen (Bibliotheken) mit bestimmten Pfaden verknüpft. Controller-, Model- und View-Klassen werden in ihren jeweiligen Ordnern gespeichert. Dann wird die Klasse loader genau wissen, wo man nach einem gegebenen "Typ" der Klasse sucht. Der Aufruf an $this->load->view('garanziavalore/index_bootstrap',$data); teilt beispielsweise der Klasse mit, die Datei index_boostrap.php aus dem Verzeichnis /application/views/garanzivalore/ zu erhalten. Der Code $this->load->model('GaranzieValoreFlexModel'); weist den Loader an, die Datei GaranzieValoreFlexModel.php in /application/models/ zu verwenden.

Suche Dokumentation der loader Klasse here.

die Codezeile

$data = $this->session->userdata("datiPreventivo"); 

ruft die userdata Methode der session Klasse (Bibliothek). Stellen Sie sich Sitzungsdaten als ein Array vor. Wenn das Array auf diese Weise definiert wurde. (Dies ist nur Pseudo-Code für das, was erreicht wird).

$userdata = array(); //empty array structure 

Der Anruf $this->session->userdata("datiPreventivo") wirksam ist, den Wert von $userdata["datiPreventivo"] zurückkehrt.

1

Ihre Argumentation ist falsch.Ich würde wirklich empfehlen Sie die offiziellen codeigniter Tutorials zu lesen, damit Sie verstehen können, wie die MVC funktioniert: Im Folgenden sind die Links

Codeigniter 2: http://www.codeigniter.com/userguide2/

Codeigniter 3: http://www.codeigniter.com/user_guide/

CI-Controller behandelt verschiedene URLs. Wenn Sie in einem Controller eine Funktion mit dem Namen index erstellen, wird diese beim Zugriff auf den Controller automatisch geladen. Für Ihren Fall sollte http://MYURL/garanzieValoreFlex auf die Funktion zugreifen. Um auf eine andere Funktion zuzugreifen, müssen Sie http://MYURL/garanzieValoreFlex/**MyFunction** (Lesen Sie mehr http://www.codeigniter.com/user_guide/general/urls.html?highlight=url#codeigniter-urls) Die Zurück-Funktion ist eine benutzerdefinierte Funktion.