Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174

    Call to undefined function

    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

  2. #2
    posta tutto dispatcher.php
    perché da quello che hai postato non si riesce a vedere...

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Ma quello è tutto Dispatcher!

  4. #4
    Originariamente inviato da Hermiod
    Ma quello è tutto Dispatcher!
    scusa ma
    Fatal error: Call to undefined function validate()... on dispatcher.php on line 32

    alla linea 32 non c'è nessuna chiamata a validate()


    allora dicci almeno qual è la linea 32 di dispatcher.php

  5. #5
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Ciao philbert, scusami te, non mi ero accorto che non venivano riportati i numeri di linea; comunque la linea 32 è la seguente
    codice:
    $controller->{$url[1]()};
    del controller caricato invoca il metodo specificato in $url[1].
    Spero sia chiaro...

  6. #6
    ok, e però la classe Controller non la vedo, se la posti diamo un'occhiata...

  7. #7
    Utente di HTML.it L'avatar di Enoa
    Registrato dal
    Jul 2005
    Messaggi
    573
    Modifica questo (e l'altro):
    Codice PHP:
    $controller->{$url[1]()}; 
    in
    Codice PHP:
    $controller->{$url[1]}(); 

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    classe controller

    Codice PHP:
    <?php

    class Controller {

        private 
    $view;
        
        function 
    __construct() {
            
    $this->view = new View();
        }

        public function 
    getView() {
            return 
    $this->view;
        }
        
    }

  9. #9
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Praticamente ciò che non capisco è: mi dice che la funzione non è definita quando invece se faccio una get_class_methods mi stampa la lista dei metodi incluso quello che invoco e ho aggiunto il controllo method_exists e il metodo risulta esserci

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2009
    Messaggi
    174
    Enoa, ho letto ora il tuo post e complimenti, hai beccato il bug, era proprio quello!!!
    Grazie infinite!!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.