10.02.2017 7616 2

20 крутых PHP-библиотек на начало 2017

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

Если мы не включили в этот список какую-то новую библиотеку, которая вам нравится, поделитесь ею в коментариях :)


Requests for PHP

Эта библиотека, у которой нет зависимостей, позволяет отправлять HTTP запросы. Она предоставляет методы для добавления заголовков, обращения к данным ответа, обработки форм и всего остального, что вам может понадобиться. Все это аккуратно собрано в чистый и простой для использования API.

$headers = array('Accept' => 'application/json');
$options = array('auth' => array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);

var_dump($request->status_code);
// int(200)

var_dump($request->headers['content-type']);
// string(31) "application/json; charset=utf-8"

var_dump($request->body);
// string(26891) "[...]"

Rinvex Country

Rinvex Country — это PHP-пакет, который позволяет разработчикам получать детальную информацию о странах со всего мира. Имея под рукой больше 50 методов, вы можете узнать площадь Анголы, валюту Кипра, самоназвание Намибии или даже имя Финлядии, используемое в FIFA. Есть куча доступной информации, причем источники вполне надежны.

$egypt = country('eg');

$egypt->getCapital();   // Cairo
$egypt->getDemonym();   // Egyptian
$egypt->getTld();       // .eg
$egypt->getContinent(); // Africa
$egypt->getSubregion(); // Northern Africa
$egypt->getBorders();   // ["ISR","LBY","SDN"]

Botman

Это PHP-библиотека для разработки ботов для мессенджеров. Работает с самыми популярными платформами сообщений, а именно Facebook Messenger, Slack, Telegram, WeChat и другими. Также имеется готовый шаблон проекта на Laravel.

// создаем объект
$botman = BotManFactory::create($config);

// говорим боту, что нужно будет "слушать"
$botman->hears('hello', function (BotMan $bot) {
    $bot->reply('Hello yourself.');
});

// запускаем 
$botman->listen();

Charts

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

$chart = Charts::create('line', 'highcharts')
    ->view('custom.line.chart.view') 
    ->title('My nice chart')
    ->labels(['First', 'Second', 'Third'])
    ->values([5,10,20])
    ->dimensions(1000,500)
    ->responsive(false);

Swap

Swap позволяет получить курсы валют из различных сервисов, таких как Fixer, Google и Yahoo. Ответы на запросы могут быть без проблем закэшированы и получены позднее. Эта библиотека также доступна в виде пакета Laravel.

// Создаем Swap с Fixer.io
$swap = (new Builder())
    ->add('fixer')
    ->build();

// Получаем последний курс EUR/USD
$rate = $swap->latest('EUR/USD');

// 1.129
$rate->getValue();

// Получаем курс EUR/USD 15-дневной давности
$rate = $swap->historical('EUR/USD', (new \DateTime())->modify('-15 days'));

Math PHP

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

// Множители целого числа
$factors = Algebra::factors($n);

// Последовательность Фибоначчи
$fib = Advanced::fibonacci($n);

// Объединения
$nCk  = Combinatorics::combinations($n, $k);

// Коэффициенты вероятности
$LL = Experiment::likelihoodRatio($a, $b, $c, $d);

PHPUnit

PHPUnit — это продвинутый фреймворк для тестирования, который дает возможность командам разработчиков тщательно тестировать свой код. Unit-тесты написаны в виде объектно-ориентированных standalone классов с помощью многочисленных методов для обработки значений, зависимостей и т.д. Также предоставляется простой консольный интерфейс для запуска тестов и вывода отчетов.

class StackTest extends TestCase
{
    public function testPushAndPop()
    {
        $stack = [];
        $this->assertEquals(0, count($stack));

        array_push($stack, 'foo');
        $this->assertEquals('foo', $stack[count($stack)-1]);
        $this->assertEquals(1, count($stack));

        $this->assertEquals('foo', array_pop($stack));
        $this->assertEquals(0, count($stack));
    }
}

Atoum

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

$this->given($testedInstance = new testedClass())
    ->and($testedClass[] = $firstValue = uniqid())
    ->then
        ->sizeof($testedInstance)->isEqualTo(1)
        ->string($testedClass[0])->isEqualTo($firstValue);

Simple Regex Language

PHP-реализация Simple Regex Language — более понятного для человека языка для написания регулярных выражений. Библиотека имеет множество методов, которые могут быть вызваны цепочкой, формирующие читабельные и понятные RegEx-правила. У этой библиотеки также есть реализации на JavaScript и Python.

$query = SRL::startsWith()
    ->anyOf(function (Builder $query) {
        $query->digit()
            ->letter()
            ->oneOf('._%+-');
    })->onceOrMore()
    ->literally('@')
    ->anyOf(function (Builder $query) {
        $query->digit()
            ->letter()
            ->oneOf('.-');
    })->onceOrMore()
    ->literally('.')
    ->letter()->atLeast(2)
    ->mustEnd()->caseInsensitive();

Stash

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

$pool = $this->cachePool;

//  Получить Stash-объект из кэша.
$item = $pool->getItem("/user/{$userId}/info");

// Получить из него данные, если они там есть.
$userInfo = $item->get();

// Элемент либо отсутствует либо устарел.
if($item->isMiss())
{
    // Запустить относительно тяжелый код.
    $userInfo = loadUserInfoFromDatabase($userId);

    // Установить новое значение в $item.
    $item->set($userInfo);

    // Сохранить результат.
    $pool->save($item)
}

PHP VCR

Аналог популярной библиотеки на Ruby для тестирования взаимодействия с HTTP. PHP VCR записывает HTTP-запросы и хранит их в "кассетах", которые могут быть воспроизведены позже. Также доступен набор средств для тестирования, делая возможным детальное инспектирование и сравнение записей.

// После включения VCR будет перехватывать все запросы
\VCR\VCR::turnOn();

// Записывать запросы и ответы в файл 'example'
\VCR\VCR::insertCassette('example');

// Этот запрос будет выполнен один раз и воспроизведен в дальнейшем при тестах
$result = file_get_contents('http://example.com');
$this->assertNotEmpty($result);

// Останавливаем запись
\VCR\VCR::eject();

// Отключаем VCR, чтобы не перехватывать запросы
\VCR\VCR::turnOff();

OAuth 2.0 Server

Эта библиотека дает возможность без проблем настроить OAuth 2.0 сервер и установить все уровни аутентификации необходимые для защиты вашего API. Она полностью соответствует стандартам и поддерживает все права, определенные в протоколе OAuth. Кстати, Laravel Passport разработан на основе OAuth 2.0 Server.

// Установить сервер авторизации
$server = new \League\OAuth2\Server\AuthorizationServer(
    $clientRepository,
    $accessTokenRepository,
    $scopeRepository,
    $privateKey,
    $publicKey
);

// Включить права
$server->enableGrantType(
    new \League\OAuth2\Server\Grant\ClientCredentialsGrant(),
    new \DateInterval('PT1H') // access tokens will expire after 1 hour
);

Imagine

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

$palette = new Imagine\Image\Palette\RGB();

$image = $imagine->create(new Box(400, 300), $palette->color('#000'));

$image->draw()
    ->ellipse(new Point(200, 150), new Box(300, 225), $image->palette()->color('fff'));

$image->save('/path/to/ellipse.png');

MINI

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

// Работаем с моделью
$songs = $this->model->getAllSongs();
$amount_of_songs = $this->model->getAmountOfSongs();

// Подгружаем вьюшки
require APP . 'views/_templates/header.php';
require APP . 'views/songs/index.php';
require APP . 'views/_templates/footer.php';

AWS SDK

Официальная библиотека для работы с веб-сервисами Amazon (AWS). SDK позволяет подключиться к AWS любому проекту на PHP и подключиться ко всем доступным сервисам. Также есть обертка для Laravel, которую можно найти здесь.

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-west-2'
]);

$s3->putObject([
    'Bucket' => 'my-bucket',
    'Key'    => 'my-object',
    'Body'   => fopen('/path/to/file', 'r'),
    'ACL'    => 'public-read',
]);

Purl

Легковесная библиотека для работы с URL. C Purl вы можете получать данные из URL-адресов, манипулировать запросами, проверять строки на соответствие URL и многое другое.

$url = \Purl\Url::parse('http://jwage.com')
    ->set('scheme', 'https')
    ->set('port', '443')
    ->set('user', 'jwage')
    ->set('pass', 'password')
    ->set('path', 'about/me')
    ->set('query', 'param1=value1¶m2=value2');

echo $url->getUrl(); // https://jwage:password@jwage.com:443/about/me?param1=value1¶m2=value2
echo $url->publicSuffix; // com
echo $url->registerableDomain; // jwage.com

Daux.io

Генаратор сайтов документаций, на основе структуры папок и Markdown-файлов. Daux.io включает подсветку синтаксиса, 4 темы оформления, навигацию с ЧПУ и многое другое.

// Пример конфигурации
{
    "title": "DAUX.IO",
    "tagline": "The Easiest Way To Document Your Project",
    "author": "Justin Walsh",
    "image": "app.png",
    "html": {
        "theme": "daux-blue",
        "breadcrumbs": true,
        "repo": "justinwalsh/daux.io",
        "edit_on_github": "justinwalsh/daux.io/blob/master/docs",
        "twitter": ["justin_walsh", "todaymade"],
        "google_analytics": "UA-12653604-10",
        "links": {
            "Download": "https://github.com/justinwalsh/daux.io/archive/master.zip",
            "GitHub Repo": "https://github.com/justinwalsh/daux.io",
            "Made by Todaymade": "http://todaymade.com"
        }
    }
}

Dompdf

Dompdf — это генератор PDF, который использует обычную разметку HTML и конвертирует ее в .pdf файлы. Эта библиотека понимает большинство CSS-правил, которые могут быть встроены прямо в разметку или подключаться из стороннего файла.

// указываем неймспейс use Dompdf\Dompdf;

// создаем объект и передаем разметку $dompdf = new Dompdf(); $dompdf->loadHtml('hello world');

// (Не обязательно) Устанавливаем размер листа и ориентацию $dompdf->setPaper('A4', 'landscape');

// Сгенерировать PDF $dompdf->render();

// Вывести сгенерированный результат в браузер $dompdf->stream();

Instaphp

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

$api = new Instaphp\Instaphp([
    'client_id' => 'your client id',
    'client_secret' => 'your client secret',
    'redirect_uri' => 'http://somehost.foo/callback.php',
    'scope' => 'comments+likes'
]);

$popular = $api->Media->Popular(['count' => 10]);

if (empty($popular->error)) {
    foreach ($popular->data as $item) {
        printf('', $item['images']['low_resolution']['url']);
    }
}

Latitude

Библиотека без зависимостей для создания SQL-запросов с помощью методов, которые могут быть вызваны цепочкой. Она поддерживает большинство типов запросов и работает с MySQL, Postgres, SQL Server и другими базами данных. Также есть хелперы для экранирования символов, что позоволяет избежать SQL-инъекции.

$select = SelectQuery::make(
        'id',
        'username'
    )
    ->from('users');

echo $select->sql();
// SELECT id, username FROM users

Статью перевел aziev. Оригинал на Tutorialzine.com доступен по ссылке.

Возможно, вам будет интересно также почитать: