2016-10-06 4 views
-2

Мне нужно использовать плагин маршрутизации для php, и я решил использовать nikic/FastRoute [https://github.com/nikic/FastRoute]. Но из-за моих ограниченных знаний для php я все еще не могу использовать его успешно.Маршрутизация Lib для PHP7

Вот мой код.

require_once 'FastRoute/src/functions.php'; 
# create a stack of actions 

$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $r) { 
    $r->addRoute('GET', '/', 'get_all_users_handler'); 
    // {id} must be a number (\d+) 
    $r->addRoute('GET', '/contract-management', 'get_user_handler'); 
    // The /{title} suffix is optional 
    $r->addRoute('GET', '/articles/{id:\d+}[/{title}]', 'get_article_handler'); 
}); 

// Fetch method and URI from somewhere 
$httpMethod = $_SERVER['REQUEST_METHOD']; 
$uri = $_SERVER['REQUEST_URI']; 

// Strip query string (?foo=bar) and decode URI 
if (false !== $pos = strpos($uri, '?')) { 
    $uri = substr($uri, 0, $pos); 
} 
$uri = rawurldecode($uri); 

$routeInfo = $dispatcher->dispatch($httpMethod, $uri); 
switch ($routeInfo[0]) { 
    case FastRoute\Dispatcher::NOT_FOUND: 
     // ... 404 Not Found 
     break; 
    case FastRoute\Dispatcher::METHOD_NOT_ALLOWED: 
     $allowedMethods = $routeInfo[1]; 
     // ... 405 Method Not Allowed 
     break; 
    case FastRoute\Dispatcher::FOUND: 
     $handler = $routeInfo[1]; 
     $vars = $routeInfo[2]; 
     // ... call $handler with $vars 
     break; 
} 

function get_user_handler(){ 
    print_r("here"); 
} 

function get_article_handler(){ 
    print_r("article handler"); 
} 

Я просто изменил запрос '/path/to/vendor/autoload.php'; для require_once 'FastRoute/src/functions.php'; из примера кода. Но приведенная ниже ошибка показана.

Неустранимая ошибка: нечистая ошибка: Class 'FastRoute \ RouteCollector' не найден в C: \ wamp \ www \ testproj \ includes \ FastRoute \ src \ functions.php: 21 Трассировка стека: # 0 C: \ wamp \ www \ testproj \ includes \ routing.php (13): FastRoute \ simpleDispatcher (Object (Closure)) # 1 C: \ wamp \ www \ testproj \ index.php (9): require_once ('C: \ wamp \ www \ testp ... ') # 2 {main}, брошенный в C: \ wamp \ www \ testproj \ includes \ FastRoute \ src \ functions.php в строке 21

Я думаю, что я сделал что-то неправильно с настройкой. Но я все еще не могу найти лучшего образца для новичков. Итак, пожалуйста, укажите мне, где я сделал неправильно. Заранее спасибо.

+2

Вы уже упоминали об ошибке: «Я только что изменил запрос« /path/to/vendor/autoload.php »; для require_once« FastRoute/src/functions.php »из кода примера». Поиск PHP-композитора и автозагрузки. –

+0

Спасибо Olaf Dietsche. Я не понимал, что этот композитор или автозагрузка имеют такой эффект. Но у меня все еще есть вопрос. Не могу ли я просто не устанавливать этот PHP-компилятор для использования таких библиотек? Есть ли способ загрузки библиотеки без установки композитора? Я не хочу устанавливать это на всех живых серверах и локальном, чтобы использовать эту lib. Или у меня нет выбора? –

+0

Когда вы каким-то образом меняете программу, а затем перестаете работать, просто возвращайте свое изменение и видите, если оно решает проблему. Затем вы можете посмотреть соответствующий код и попытаться понять, как код (или его отсутствие) влияет на вашу программу. –

ответ

1

Просьба ознакомиться с информацией о PHP autoload.

Ваша задача заключается в удалении линии

require '/path/to/vendor/autoload.php'; 

Этот скрипт устанавливает автозагрузчик, который автоматически загружает необходимые файлы сценариев PHP, когда некоторые требуется класс PHP неизвестно.

Если вы не хотите, чтобы этот автозагрузчик по какой-то причине, вы должны загрузить необходимые классы другим способом. Обычно это делается путем добавления строк, как в каждом PHP скрипт

require 'FastRoute/RouteCollector.php'; 
require 'FastRoute/Dispatcher.php'; 
... 

Таким образом, большую часть времени вы хотите это автозагрузчика, потому что это делает жизнь намного проще и код короче.

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