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.