Использование klein.php без композитора?

Есть ли пример кода? Вот что я получил:

// index.php

require_once __DIR__ . '/Klein/Klein.php';

$klein = new \Klein\Klein();

$klein->respond(function () {
    return 'All the things';
});

В PHP 5.3 это возвращает ошибку (фатальная ошибка: класс 'Klein\ServiceProvider' не найден в).

2 ответа

Решение

Хорошо, я собрал немного кода, который, кажется, работает. Не могу сказать, что рекомендую, но он загружает Klein без ошибок, по крайней мере, на данный момент.

<?php

function include_dir($path) {
    if(is_dir($path)) {
        foreach (glob($path.'*') as $filename) {
            if(is_file($filename) && pathinfo($filename, PATHINFO_EXTENSION) == 'php') {
                require_once $filename;
            } elseif(is_dir($filename)) {
                include_dir($filename.'/');
            } 
        }
    }
}

require_once __DIR__ . '/Klein/Exceptions/KleinExceptionInterface.php';
require_once __DIR__ . '/Klein/Exceptions/HttpExceptionInterface.php';
include_dir(__DIR__ . '/Klein/');

$klein = new \Klein\Klein();

$klein->respond(function () {
    return 'All the things';
});

Я начал с небольшого цикла в исходном каталоге Klein, который я нашел здесь: /questions/28193221/kak-vklyuchit-vse-fajlyi-php-iz-kataloga/28193233#28193233

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

Более правильным ответом будет использование автозагрузчика. Я не уверен, почему вам не нравится автозагрузчик Composer, но он довольно изящен и прост в использовании. Материал автозагрузки кэшируется, поэтому он не влияет на производительность. Вы можете использовать автозагрузчик независимо от менеджера пакетов. Composer не сильно определяет структуру вашего проекта, за исключением размещения каталога composer.json и vendors/ в корне проекта. Между тем, вы можете автоматически устанавливать всевозможные библиотеки PHP с помощью Composer, блокировать версию или получать обновления. Это хороший инструмент. Если у вас есть общий хостинг, вы можете запустить Composer для своего проекта локально, а затем загрузить результаты. Извините, я уверен, что у вас есть свои причины, просто Composer, возможно, самая крутая вещь, которая случается на PHP-земле за многие годы.

Но если вам не нравится Composer или вы не можете использовать его из-за каких-то внешних ограничений, есть другие автозагрузчики PSR-0/PSR-4:

https://gist.github.com/jwage/221634

/questions/45010780/php-samyij-legkij-sovmestimyij-s-psr-0-avtozagruzchik/45010791#45010791

Или вы можете свернуть свой собственный: http://zaemis.blogspot.fr/2012/05/writing-minimal-psr-0-autoloader.html

Похоже, это всего лишь несколько строк кода.

Если это не удастся, то я, возможно, поищу другую библиотеку маршрутизации. Может быть, попробовать GluePHP?

http://gluephp.com/

Это один файл с практически нулевыми зависимостями. Вы не получите модную маршрутизацию на основе замыканий в стиле Синатры. Вместо этого вы создаете очень простой класс для каждого маршрута. Не уверен, что это подлежит обсуждению для вас. Но он маленький и самостоятельный.

Slim Framework также может быть вариантом:

http://www.slimframework.com/

Они предлагают Composer и не Composer методы установки. Не-Composer метод использует свой собственный автозагрузчик. Неплохой подход, но я не уверен, что соответствует вашим критериям.

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

В настоящее время я разрабатываю php роутер, который нацелен на исключительно высокую производительность. и никакой дополнительной зависимости. Возможно, вы захотите взглянуть:

https://github.com/c9s/Pux

FYI:

Pux в 48,5 раза быстрее, чем маршрутизатор Symfony при статической диспетчеризации маршрутов, и в 31 раз быстрее при диспетчеризации регулярных выражений. (с установленным расширением pux)

Pux старается не тратить время на вычисления для динамического построения всех маршрутов (например, Symfony/Routing). Вместо этого Pux компилирует ваши маршруты в обычный массив PHP для кеширования, скомпилированные маршруты могут быть загружены из кеша очень быстро.

С поддержкой Pux PHP Extension вы можете загружать и отправлять маршруты в 1,5~2 раза быстрее, чем чистый PHP Pux.

Другие вопросы по тегам