[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как устранить ошибку: «call_user_func_array() expe
Страницы: 1, 2, 3, 4
bespeco
Всё понимаю , а сказать не могу ! Так я разбираюсь в php.
Вот файл router.php
<?php

/**
* Класс Router
* Компонент для работы с маршрутами
*/

class Router
{

/**
* Свойство для хранения массива роутов
*
@var array
*/

private $routes;

/**
* Конструктор
*/

public function __construct()
{
// Путь к файлу с роутами
$routesPath = ROOT . '/config/routes.php';

// Получаем роуты из файла
$this->routes = include($routesPath);
}

/**
* Возвращает строку запроса
*/

private function getURI()
{
if (!empty($_SERVER['REQUEST_URI'])) {
return trim($_SERVER['REQUEST_URI'], '/');
}
}


/**
* Метод для обработки запроса
*/

public function run()
{
// Получаем строку запроса
$uri = $this->getURI();

// Проверяем наличие такого запроса в массиве маршрутов (routes.php)
foreach ($this->routes as $uriPattern => $path) {

// Сравниваем $uriPattern и $uri
if (preg_match("~$uriPattern~", $uri)) {

// Получаем внутренний путь из внешнего согласно правилу.
$internalRoute = preg_replace("~$uriPattern~", $path, $uri);
echo $uri; //Если ввести не правильный адрес в строке
//пример:www.eshopper.ru/12345 результат 12345
//это есть не существующий адрес!правильно?
//Здесь можно перенаправить результат на страницу 404?
//хостинг виртуальный и не поддерживает страницы ошибок.

// Определить контроллер, action, параметры


$segments = explode('/', $internalRoute);

$controllerName = array_shift($segments) . 'Controller';
$controllerName = ucfirst($controllerName);

$actionName = 'action' . ucfirst(array_shift($segments));

$parameters = $segments;

// Подключить файл класса-контроллера
$controllerFile = ROOT . '/controllers/' .
$controllerName . '.php';

if (file_exists($controllerFile)){
include_once($controllerFile);
}

// Создать объект, вызвать метод (т.е. action)
$controllerObject = new $controllerName;

/* Вызываем необходимый метод ($actionName) у определенного
* класса ($controllerObject) с заданными ($parameters) параметрами
*/


$result = call_user_func_array(array($controllerObject, $actionName), $parameters);

// Если метод контроллера успешно вызван, завершаем работу роутера
if ($result != null) {
break;
}
}
}
}

}


Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.