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

Problem sa custom MVC frameworkom

[es] :: PHP :: Problem sa custom MVC frameworkom

[ Pregleda: 3420 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Labyrinthman
Labi rinthman
Student

Član broj: 320611
Poruke: 28
*.dynamic.isp.telekom.rs.



Profil

icon Problem sa custom MVC frameworkom13.10.2016. u 16:57 - pre 91 meseci
Pozdrav, pratim tutorial o pravljenju MVC-a i imam problem sa ucitavanjem controller klase.

Ovo je sav code koji imam:


Bootstrap.php

Code:

<?php  
class Bootstrap{
    private $controller;
    private $action;
    private $request;
    
    public function __construct($request){
        $this->request=$request;
            
        if(empty($this->request['controller'])){
            $this->controller='home';
        }else{
            $this->controller=$this->request['controller'];
        }
        
        if(empty($this->request['action'])) {
            $this->action='index';
        }else{
            $this->action=$this->request['action'];
        } 
        
         
    }
    
    public function createController(){
        if(class_exists($this->controller)){
            
            $parents=class_parents($this->controller);
            
            if(in_array('Controller',$parents)){
                
                if(method_exists($this->controller,$this->action)){
                    return new $this->controller($this->action,$this->request);
                    
                }else{
                    echo'<h1>method does not exist</h1>';
                    return;
                }
            }else{
                    echo'<h1>base controller not found</h1>';
                    return;
                    
                }
        }else{
                    echo'<h1>controller class does not exist</h1>';
                    return;
                }
    }
}


Controller.php

Code:

<?php
abstract class Controller{
    
    protected $request;
    protected $action;
    
    public function __construct($request,$action){
        $this->request=$request;
        $this->action=$action;
    }
    
    public function executeAction(){
        return $this->{$this->action}();
    }
    
    protected function returnView($viewModel,$fullview){
        $view='views/'.get_class($this).'/'.$this->action.'.php';
        
        if($fullview){
            require('views/main.php');
        }else{
            require($view);
        }
    }
}


Home.php

Code:

<?php

class Home extends Controller{
    protected function Index(){
        echo "home/index";
    }
}


index.php

Code:

<?php  
require('classes/Bootstrap.php');
require('classes/Controller.php');

require('controllers/Home.php');

$bootstrap=new Bootstrap($_GET);
$controller=$bootstrap->createController();

print_r($controller);

if($controller){
    $controller->executeAction();
}
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
*.dynamic.isp.telekom.rs.

Sajt: https://avramovic.info


+46 Profil

icon Re: Problem sa custom MVC frameworkom13.10.2016. u 19:29 - pre 91 meseci
Koji tačno problem imaš? Napiši nešto konkretnije
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Labyrinthman
Labi rinthman
Student

Član broj: 320611
Poruke: 28
*.dynamic.isp.telekom.rs.



Profil

icon Re: Problem sa custom MVC frameworkom13.10.2016. u 19:48 - pre 91 meseci
Problem je u tome sto se nista ne pojavljuje kada pokrenem index.php stranicu. Jedino pise da ne postoji Controller klasa ali ona je ucitana preko request.
 
Odgovor na temu

Nemanja Avramović
Engineering Manager
MENU Technologies
Beograd, Srbija

Moderator
Član broj: 32202
Poruke: 4391
*.dynamic.isp.telekom.rs.

Sajt: https://avramovic.info


+46 Profil

icon Re: Problem sa custom MVC frameworkom13.10.2016. u 21:07 - pre 91 meseci
Ok, iskopirao sam ove tvoje kodove u fajlove i kad pokrenem dobijam ovo:

Code:
Home Object ( [request:protected] => index [action:protected] => Array ( ) )
Fatal error: Method name must be a string in D:\wwwroot\test\mvc\classes\Controller.php on line 13


Ovo prvo je tvoj var_dump() u index.php a ovo drugo ti lepo kaže da ti ovde:

Code:
return $this->{$this->action}();


...$this->action nije string. Ako uradiš var_dump() na liniji iznad videćeš da je to prazan niz. A zašto je akcija niz kad bi trebalo da bude ime metode u klasi?

Onda kreneš malo da gledaš kod i vidiš da ti konstruktor klase Controller prihvata sledeće parametre:

Code:
public function __construct($request,$action)


A ti u Bootstrap klasi, u metodi "createController" radiš sledeće:

Code:
return new $this->controller($this->action,$this->request);


Nadam se da ti je sad jasnije u čemu je problem...

p.s. Nemoj da koristiš magije kao što je $this->{$this->action}() jer nije baš čitljivo i ko zna kako PHP može sutra da interpretira ovaj kod (mislim da su u verziji 7 nešto menjali oko ovih magija ). Lepo koristi call_user_func() kao čovek
Laravel Srbija.

[NE PRUŽAM PODRŠKU ZA PHP PREKO PRIVATNIH PORUKA!]
 
Odgovor na temu

Labyrinthman
Labi rinthman
Student

Član broj: 320611
Poruke: 28
*.dynamic.isp.telekom.rs.



Profil

icon Re: Problem sa custom MVC frameworkom13.10.2016. u 21:33 - pre 91 meseci
Hvala na pomoci i izdvojenom vremenu :)

 
Odgovor na temu

[es] :: PHP :: Problem sa custom MVC frameworkom

[ Pregleda: 3420 | Odgovora: 4 ] > FB > Twit

Postavi temu Odgovori

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