Buon pomeriggio e buona domenica a tutti!
Sto sviluppando, momentaneamente solo per scopi didattici, un mini-framework mvc.
In particolare sto avendo dei problemi con il sistema generico di validazione dei form di cui l'ho dotato, o meglio, sto cercando di dotarlo.
Fondamentalmente ho una classe dispatcher che provvede all'invocazione dei metodi dei controllori il cui sorgente è il seguente
Codice PHP:
<?php
class Dispatcher {
function __construct() {
$url = explode('/', rtrim(isset($_GET['url']) ? $_GET['url'] : 'index', '/'));
echo '<pre>';
print_r($url);
echo '</pre>';
$file = 'controllers/' . $url[0] . '.php';
if (file_exists($file)) {
require $file;
} else {
require 'controllers/index.php';
$controller = new Index("File $file does not exists", 'errors');
return false;
}
$controller = new $url[0];
echo '<pre>';
print_r(get_class_methods($controller));
echo '</pre>';
if (isset($url[2])) {
$controller->{$url[1]($url[2])};
} else {
if (isset($url[1])) {
$controller->{$url[1]()};
}
}
}
}
Ho poi il controller seguente che mi valida un banale form
Codice PHP:
<?php
class Form extends Controller {
function __construct() {
parent::__construct();
}
public function validate() {
parent::validate();
session_start();
$_SESSION['valid'] = array();
if (isset($_POST['username'])) {
if (count($_POST['username']) > 5) {
$_SESSION['valid']['username'] = $_POST['username'];
} else {
$this->getView()->setMessage('username must be longer than 5 characters', 'errors');
}
} else {
$this->getView()->setMessages('username is a required field', 'errors');
}
$this->getView()->render('index/index');
}
}
Nel momento in cui vado ad eseguire lo script, tutto procede secondo i piani a parte il messaggio finale!
codice:
Array
(
[0] => form
[1] => validate
)
Array
(
[0] => __construct
[1] => validate
[2] => getView
)
Fatal error: Call to undefined function validate() in C:\xampp\htdocs\mvc\core\dispatcher.php on line 32
Il primo array contiene le info riguardo a controller e metodo, rispettivamente, da invocare, mentre, il secondo array nei medoti della classe form.
Come visibile dalla stampa dei metodi della class, il metodo esiste e non capisco la motivazione dell'errore: secondo voi perché non lo vede?
Grazie in anticipo