Avatar billede delphiuser Mester
02. marts 2017 - 09:33 Der er 1 kommentar og
1 løsning

nyt problem i min mvc

Hej eksperter.

Jeg har fået et nyt problem i mit mvc. Nu har jeg fået den til at loade en default model når min $_url er tom. Så langt så godt. Men nu vil den ikke loade de andre controllers jeg har og models. er simpelthen ved at blive skør af det. Jeg har lavet en afgrænsning med stjerner der hvor fejlen er. Jeg kan bare ikke få den til at virke.

jeg har en var_dump også og den skriver følgende.

C:\wamp\www\jp-pro\libs\Bootstrap.php:58:
array (size=2)
  0 => string 'login' (length=5)
  1 => string 'add' (length=3)

Jeg får følge fejl.

Fatal error: Uncaught Error: Call to a member function loadModel() on null in C:\wamp\www\jp-pro\libs\Bootstrap.php on line 60
Error: Call to a member function loadModel() on null in C:\wamp\www\jp-pro\libs\Bootstrap.php on line 60

<?php

class Bootstrap {

    private $_url = null;
    private $_controller = null;
    private $_controllerPath = 'controllers/';
    private $_modelPath = 'models/';
    private $_errorFile = 'cmserror.php';
    private $_defaultFile = 'index.php';

    public function init() {
        $this->_getUrl();
        if(empty($this->_url[0])) {
            $this->_loadDefaultController();
            return false;
        }
        $this->_loadExistingController();
        $this->_callControllerMethod();
    }

    public function setControllerPath($path) {
        $this->_controllerPath = trim($path, '/') . '/';
    }

    public function _setModelPath($path) {
        $this->_modelPath = trim($path, '/') . '/';
    }

    public function setErrorFile($path) {
        $this->_errorFile = trim($path, '/');
    }

    public function setDefaultFile($path) {
        $this->_defaultFile = trim($path, '/');
    }

    private function _getUrl() {
        $url = isset($_GET['url']) ? $_GET['url'] : null;
        $url = rtrim($url, '/');
        $url = filter_var($url, FILTER_SANITIZE_URL);
        $this->_url = explode('/', $url);
    }

    private function _loadDefaultController() {
        $file = $this->_controllerPath .  $this->_defaultFile;
        if(file_exists($file)) {
            require $file;
            $this->_controller = new Index();
            $this->_controller->loadModel('index', $this->_modelPath);
            $this->_controller->index();
        }
    }
***********************************************************************************************
    private function _loadExistingController() {
        $file = $this->_controllerPath . $this->_url[0] . '.php';
        if(file_exists($file)) {
            exit(var_dump($this->_url));
            require $file;
            $this->_controller->loadModel($this->_url[0], $this->_modelPath);
        } else {
            $this->cmserror();
            return false;
        }
    }
***********************************************************************************************
    private function _callControllerMethod() {
        $length = count($this->_url);
        if($length > 1) {
            if(!method_exists($this->_controller, $this->_url[1])) {
                $this->cmserror();
            }
            switch ($length) {
                case 7:
                    $this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4], $this->_url[5], $this->_url[6]);
                    break;
                case 6:
                    $this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4], $this->_url[5]);
                    break;
                case 5:
                    $this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3], $this->_url[4]);
                    break;
                case 4:
                    $this->_controller->{$this->_url[1]}($this->_url[2], $this->_url[3]);
                    break;
                case 3:
                    $this->_controller->{$this->_url[1]}($this->_url[2]);
                    break;
                case 2:
                    $this->_controller->{$this->_url[1]}();
                    break;
                default:
                    $this->_controller->index();
                    break;
            }
        }
    }

    private function cmserror() {
        require $this->_controllerPath . $this->_errorFile;
        $this->_controller = new CmsError();
        $this->_controller->index();
        exit;
    }

}

jeg er løbet tør for ideer til hvad jeg kan gøre for at få det til at virker. Håber i kan hjælpe mig med det.
02. marts 2017 - 11:55 #1
HEj,

Jeg kan ikke hjælpe dig direkte med din kode (det med avanceret PH) er sort snak for mig.

MEN, når jeg løber ind i et problem (i min Delphi coding), gør jeg det, at jeg isolerer
de(m) linier  jeg mistænker for at være fejlen(e).

Eksempelvis:

  FOR N := 1 to 100 DO
        BEGIN
            ROUTINE - DO SOMETHING INTELLIGENT;
      END;
END;

Her mistænker jeg linien ;

//    ROUTINE - DO SOMETHING INTELLIGENT;

som jeg " trækker "  ud:

  FOR N := 1 to 100 DO
        BEGIN
  (*          ROUTINE - DO SOMETHING INTELLIGENT;      *)
      END;
END;

Hvis sløjfen kører , må fejen ligge i "  ROUTINE - DO SOMETHING INTELLIGENT;  "

Håber denne lille fidus giver dig et spring fremad.

Eller indsæt en masse php "WRITE testpunkt N"  (sikkert forkert syntaks)  i koden. Omkring det sidste nummer, som vises,  ligger fejlen(e).

Kristian.
Avatar billede delphiuser Mester
07. marts 2017 - 12:15 #2
Jeg lukke dette spørgsmål
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester