PHP-Login-MVC

Dieses Thema im Forum "Webentwicklung" wurde erstellt von leex, 12. Februar 2014 .

  1. 12. Februar 2014
    Ich habe das oben genannte login-mvc installiert (panique/php-login · GitHub)

    Nun habe ich das Problem, das ich Daten aus einem alten Reportingsystem vorerst so übernehmen muss.

    Die Reports werden jeweils in einer eigenen php-Datei generiert und auch so aufgerufen.

    Mein Problem dabei ist, dass ich für jede einzelne PHP-Datei eine function in den Controller schreiben müsste, damit sie im View gerendert wird.

    Gibt es eine Möglichkeit die Funktion automatisch irgendwie generieren zu lassen.

    Ein andereres Framework ist keine Alternative, nur der letzte Ausweg!

    Das ist die Funktion um die es geht:
    PHP:
    function  index ()
        {
            
    $this -> view -> render ( 'dashboard/index' );
        }
     
  2. 13. Februar 2014
    AW: PHP-Login-MVC

    Gibt es bei dem mini-framework kein controller der immer geladen wird? ich würde mal tippen der "index" controller? ansonsten, musst du es jedes mal neu aufrufen oder du fügst selbst einen controller hinzu, der jedes mal geladen wird!
    ich sehe gerade das framework ist selbst ja noch in der beta... und der kerl wollte es im januar fertig machen... ich hoffe du stürtzt dich nicht auf ein totes framework... davon gibt es nämlich schon genügend.

    btw: hast du dich vorher schonmal mit mvc beschäftigt?
     
  3. 13. Februar 2014
    AW: PHP-Login-MVC

    habe mich davor noch nicht mit mvc beschäftigt.

    innerhalb des dashboard muss ich jede unterseite die ich verlinke mit der oben genannten function deklarieren, sonst geht nicht.

    es gibt die hauptindex, die denke ich immer gerendert wird.
    php-login/application/controllers/index.php at master · panique/php-login · GitHub
     
  4. 13. Februar 2014
    AW: PHP-Login-MVC

    du weißt schon, dass ich mit mvc nicht das framework meine, sondern Model View Controller – Wikipedia ?
    und hast du dich schon mit OOP beschäftigt?

    naja ich versuch es mal einfach zu erklären:

    du hast beispielsweise den controller index in der "application/controllers/index.php", dieser controller regelt alle views, die in dem ordner "application/view/index/" sind.

    die datei "application/controllers/index.php" sieht so aus:
    PHP:
    <? php
    class  Index  extends  Controller
    {

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

        function 
    index ()
        {
                
    $this -> view -> render ( 'index/index' );
        }
    }
    in "__construct()" wird ALLES geladen, was mit diesem controller zutun hat, also wenn du hier "echo 'yolo';" rein schreibt erscheint das in allen dateien die sich in "application/view/index/" befinden.

    "index()" ist nur für die datei "application/view/index/index.php" zuständig

    würdst du jetzt das noch hinzufügen, müsstest du auch in der view/index die datei "yolo.php" erstellen
    PHP:
      function  yolo ()
        {
                
    $this -> view -> render ( 'index/yolo' );
        }
     
  5. 13. Februar 2014
    AW: PHP-Login-MVC

    Ja ich weiß was du meinst
    Habe mich schon mal grundsätzlich mit OOP beschäftigt bzw hatte es in meiner Ausbildung damals.

    Ja genau das ist ja mein Problem, dass ich eben für jede PHP-Datei die function (in deinem fall yolo.php) hinzufügen muss.
    Ich muss das aber irgendwie automatisiert bekommen, da ab und zu neue reports dazukommen und dann nicht immer manuell auch noch die function reingeschrieben werden soll.
    Hätte gerne, dass ich die PHP-Datei in den Ordner dashboard tue und diese dann auch gerendert werden kann wenn sie so aufgerufen wird "dashboard/meinedatei" ---> alsod die function zu der datei automatisch erstellt wird.
     
  6. 13. Februar 2014
    AW: PHP-Login-MVC

    hi,

    ich geh mal davon aus, das du im controller alle methode hinzufügen musst.
    also zb.
    PHP:
    function  index (){
            
    $this -> view -> render ( 'index/index' );
    }
    function 
    dashboard (){
            
    $this -> view -> render ( 'dashboard/index' );
    }
    ...
    und genau das willst du nicht?
    vielleicht hilft das.
    PHP:
    public function  __call ( $name $arguments ) {
        if(
    file_exists ( dirname ( __FILE__ ). '/../views/' . $name . '/index.php' )){
            
    $this -> view -> render ( $name . '/index' );
        }
    }
    diese methode wird immer aufgerufen wenn ein methoe nicht zu finden ist.
    du guckst anhand des $name (methode) ob deine datei vorhanden ist, wenn ja, dann render.
    ungetestet und nur ein denkansatz.
     
  7. 13. Februar 2014
    AW: PHP-Login-MVC

    ja fast..
    es handelt sich dabei nicht um die Hauptkategorien wie index, dashboard etc. sondern unterseiten vom dashboard also dashboard/index, dashboard/report_statistik, dashboard/report_verkäufe
    wobei report_statistik und report_verkäufe dann die gleichnamigen php dateien im ordner dashboard wären.
     
  8. 13. Februar 2014
    AW: PHP-Login-MVC

    dann guck mal was $arguments liefert.
    ggf. könnte es schon so gehen.
    PHP:
    public function  __call ( $name $arguments ) {
        
    var_dump ( $arguments );
        
    // ggf. ist $arguments ein array
        // dann muss $arguments bearbeitet werden, damit du erhälst was du bruchst
        
    $arguments  $this -> tuWasDamit ( $arguments );
        
        if(
    file_exists ( dirname ( __FILE__ ). '/../views/' . $name . '/' . $arguments . '.php' )){
            
    $this -> view -> render ( $name . '/' . $arguments );
        }
    }
    private function 
    tuWasDamit ( $arguments ) {
        
    // $arguments verarbeiten
        
    return  $arguments ;
    }
     
  9. 17. Februar 2014
    AW: PHP-Login-MVC

    Mir ist nicht ganz klar woher jetzt $name und $arguments herkommen soll.

    Habe es auch ausprobiert, kommt aber fehler "missing argument".

    __________

    wenn das mit dem "__call" gehen sollte müsste diese funktion auf jeden fall funktionieren


    tut sie aber nicht
     
  10. 19. Februar 2014
    AW: PHP-Login-MVC

    Keiner ne Idee? Irgendwo muss das __call überschrieben werden, da es außerhalb vom framework funktioniert.
    Find nur nirgends wo.
     
  11. 24. Februar 2014
    Zuletzt bearbeitet: 24. Februar 2014
    AW: PHP-Login-MVC

    gut __call kann ja nicht da in application / libs / Application.php auf index() verwiesen wird, wenn nix gefunden wird.
    d.h. du muß die Application.php anpassen.
    am ende von __construct()
    PHP:
    ...
    } else {
        
    // invalid URL, so simply show home/index
        
    require  CONTROLLER_PATH  'index.php' ;
        
    $controller  = new  Index ();
        
    //$controller->index();
        
    $controller -> other ( $this -> url_controller $this -> url_action );
    }
    und jetzt eine methode (other) in application / controllers / index.php
    PHP:
    public function  other ( $controller $action ) {
        if(
    file_exists ( dirname ( __FILE__ ). '/../views/' . $controller . '/' . $action . '.php' )){
            
    $this -> view -> render ( $controller . '/' . $action );
        }
    }
    das sollte nun besser laufen.

    // edit
    ungetestet
     
  12. 24. Februar 2014
    AW: PHP-Login-MVC

    hast du das getestet?
    Bei mir tut sich leider nichts. Bekomme trotzdem bei fehlenden Controllern "error/index" angezeigt.

    edit:
    Wenn ich das hier weiter oben beim ersten else "error/index" einfüge, stimmt die URL aber bekomme diesen Fehler
    PHP:
    ...else {
                            
    // redirect user to error page (there's a controller for that)
                              
    $this -> url_controller -> other ( $this -> url_controller $this -> url_action );
                        }...
    Code:
     Catchable fatal error: Object of class Dashboard could not be converted to string in C:\xampp\htdocs\reports\php-login\application\controllers\dashboard.php on line 45
    edit2: gelöst

    habe jetzt im Controller nur noch

    Code:
    function other($controller, $action) {
    
     $this->view->render('dashboard/'.$action);
    
     } 
    Hat anscheinend etwas mit dem Pfad nicht gestimmt.
     
  13. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.