2016-09-06 6 views
0

Что не так с моими кодами, я всегда получал фатальную ошибку, когда меняю свой URL. Я не могу удалить те, которые находятся ниже, которые не определены, я не получу 2-й URL. Я новичок создание MVC, пожалуйста, помогитеPHP: Неустранимая ошибка: вызов неопределенного метода: :(url)()

class event_trap 
{ 
    function __construct() 
    { 
     $url = $_GET['url']; 
     $url = rtrim($url. '/'); 
     $url = explode('/', $url); 
     //print_r($url); 

     $file = 'event_mvc/controllers/' .$url[0] . '.php'; 
     if (file_exists($file)) { 
      require $file; 
     } else { 
      require 'event_mvc/controllers/error.php'; 
      $controller = new Error(); 
      return false; 
     } 

     $controller = new $url[0]; 

     if (isset($url[2])) { 
      $controller->{$url[1]}($url[2]); //<-- Undefined method 
     } else { 
      if(isset($url[1])) { 
       $controller -> {$url[1]}(); //<-- Undefined method 
      } else { 

      }  
     } 
    } 
} 

var_dump ($ URL)

array (size=2) 
    0 => string 'event' (length=5) 
    1 => string '' (length=0) 

Fatal error: Call to undefined method event::() in 
    C:\wamp\www\tabulation\event_mvc\libs\Bootstrap.php on line 33 
    Call Stack 
    # Time Memory Function Location 
    1 0.0004 142728 {main}() ..\event.php:0 
    2 0.0012 149096 event_trap->__construct() ..\event.php:4 
+0

Пожалуйста, покажите свой вызов объекта и строку запроса. –

+0

Пожалуйста, 'var_dump ($ url)'. –

+0

@PhilippPalmtag var_dump() показывает мне массив (size = 2) 0 => string 'event' (length = 5) 1 => string '' (length = 0), а ошибка Fatal error: Call to undefined method event: :(), то есть когда я удаляю $ ur [2] –

ответ

0

Ваших переменной $url является массивом, который используется для создания объекта и вызывать методы с параметрами или без них. С массивом ou имеет var_dumped 0 => событие, 1 => '' вы создаете объект события класса и вызываете метод '', который не существует. Исправьте свой код или передайте действительное имя функции.

Вы можете попробовать это, которое также проверяет пустую строку.

if (isset($url[2]) && !empty($url[2]) { 
    $controller->{$url[1]}($url[2]); 
} else { 
    if(isset($url[1]) && !empty($url[1]) { 
     $controller -> {$url[1]}(); 
    } 
} 
+0

Спасибо, что это работает, также, что демпинг URL действительно полезен –

+1

Я считаю, что вы сначала проверяете функцию и параметр. Вы также можете использовать 'method_exists()' для проверки наличия методов, если вы используете вызовы переменных функций. –

Смежные вопросы