SlideShare ist ein Scribd-Unternehmen logo
1 von 20
МИКРОФРЕЙМВОРКИ PHP
Для чего
 Простые сайты
 еще не ZendFramework, но уже неWordpress
 Прототип функционала
 показать заказчику что-то до разработки
 REST API
 для мобильных приложений, HTTP+JSON
 Промежуточный компонент системы
 mailer
 Расширить функционал существующей системы
 сайт на CMS давно работает, хочется добавить
Проблема full-stack фреймворков
 Фреймворки обладают огромнейшим
функционалом и возможностями.
 Но очень часто при разработке небольших
проектов, весь функционал фреймворка
попросту не нужен, вполне достаточно только
неких базовых возможностей.
The MicroPHP Manifesto
 I am a PHP developer
 I am not a Zend Framework or
Symfony or CakePHP developer
 I think PHP is complicated enough
 I like building small things
 I like building small things with
simple purposes
 I like to make things that solve
problems
 I like building small things that work
together to solve larger problems
I want less code, not more
 I want to write less code, not more
 I want to manage less code, not
more
 I want to support less code, not
more
 I need to justify every piece of code I
add to a project
 I like simple, readable code
 I want to write code that is easily
understood
 I want code that is easily verifiable
http://microphp.org - Ed Finkler
начинать с как можно более легковесной основы
Что есть (обычно)
 роутинг
 базовый MVC
 обработка HTTP запросов
 обработка ошибок
 возможность расширения
Чего нет (обычно)
 ORM
 кэширование
 шаблонизатор
 мультиязычность
 валидация форм
 авторизация / аутентификация, роли
Lumen
 version 5.4
 Основан на Laravel
 PHP >= 5.6.4
 https://lumen.laravel.com
 OpenSSL PHP Extension
 PDO PHP Extension
 Mbstring PHP Extension
Lumen: Пример Simple API
use IlluminateHttpRequest;
$app = require __DIR__ . '/../bootstrap/app.php';
class Dev extends IlluminateDatabaseEloquentModel {
protected $table = 'devs';
}
$app->get('dev', function() {
return response()->json(Dev::all());
});
$app->get('dev/{id}', function($id) {
return response()->json(Dev::find($id));
});
$app->post('dev', function(Request $request) {
$dev = new Dev();
$dev->name = $request->input('name');
$dev->focus = $request->input('focus');
$dev->hireDate = $request->input('hireDate');
$dev->save();
return response()->json($dev, 201);
});
$app->delete('dev/{id}', function($id) {
Dev::find($id)->delete();
return response('', 200);
});
$app->patch('dev/{id}', function(Request $request, $id) {
$dev = Dev::find($id);
$dev->name = $request->input('name', $dev->name);
$dev->focus = $request->input('focus', $dev->focus);
$dev->hireDate = $request->input('hireDate', $dev->hireDate);
$dev->save();
return response()->json($dev);
});
$app->run();
APP_ENV=local
APP_DEBUG=true
APP_KEY=
APP_TIMEZONE=UTC
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=my_db
DB_USERNAME=user1
DB_PASSWORD=b7XES7sw
CACHE_DRIVER=memcached
QUEUE_DRIVER=sync
.env
public/index.php
Lumen: Особенности
 Отличная документация
 Очень быстрый
 Можно обновиться до Laravel
 Размер большой для микрофреймворка
 Специализация: micro-services и API
 Не включает работу с сессиями и шаблонами
Slim
 version: 3.8.1
 Web server with URL rewriting
 PHP 5.5+
 https://www.slimframework.com
Slim: Пример
// index.php:
$app->get('/tickets', function(Request $request, Response $response) {
$this->logger->addInfo("Ticket list");
$mapper = new TicketMapper($this->db);
$tickets = $mapper->getTickets();
$response = $this->view->render($response, "tickets.phtml", ["tickets" => $tickets]);
return $response;
});
?>
// tickets.phtml:
<?php
foreach ($tickets as $ticket):
?>
<tr>
<td><?= $ticket->getTitle() ?></td>
<td><?= $ticket->getComponent() ?></td>
<td><?= $ticket->getShortDescription() ?> ...</td>
<td>
<a href="<?= $router->pathFor('ticket-detail', ['id' => $ticket->getId()]) ?>">view</a>
</td>
</tr>
<?php
endforeach;
?>
Slim: Особенности
 HTTP Router
 Middleware
 PSR-7 Support (HTTP message interfaces)
 Dependency Injection
 Хорошая документация
 Нет ORM
 Очень ограниченный функционал
Silex
 version: 2.0
 Symfony2
 "php": ">=5.5.9“
 https://silex.sensiolabs.org
Silex: Пример
// --- /public_html/index.php ---
// Require the app and run it
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'app.php';
$app->run();
// --- /app/app.php ---
// Bootstrap
require __DIR__ . DIRECTORY_SEPARATOR . 'bootstrap.php';
// Basic Routing
$app->get('/', function(SilexApplication $app) {
return 'ohai';
});
// --- /app/bootstrap.php ---
// Require Composer Autoloader
require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php';
// Create new Silex App
$app = new SilexApplication();
// App Configuration
$app['debug'] = true;
Silex: Особенности
 Не знакомым с Symfony покажется сложным
 Очень хорошая документация
 Модульный, используйте то, что нужно
 Хорош для больших проектов
 Медленнее Lumen в 2 раза
Phalcon Micro
 version: 3.1.1
 Phalcon
 PHP >= 5.5
 https://phalconphp.com
 Micro Applications
Phalcon Micro: Пример
use PhalconDIFactoryDefault, PhalconMvcMicro, PhalconHttpResponse, PhalconHttpRequest;
$di = new FactoryDefault();
//Using an anonymous function, the instance will be lazy loaded
$di["response"] = function () {
return new Response();
};
$di["request"] = function () {
return new Request();
};
$app = new Micro();
$app->setDI( $di );
$app->get( '/api', function () use ( $app ) {
echo "Welcome";
} );
$app->post( '/api', function () use ( $app ) {
$post = $app->request->getPost();
print_r( $post );
} );
$app->notFound(
function () use ( $app ) {
$app->response->setStatusCode( 404, "Not Found" )->sendHeaders();
echo 'This is crazy, but this page was not found!';
}
);
$app->handle();
Phalcon Micro: Особенности
 PHP extension (C)
 Самый быстрый
 Отличная документация
 Для дебага надо знать C или Zephir
Для чего (повтор)
 Простые сайты
 еще не ZendFramework, но уже неWordpress
 Прототип функционала
 показать заказчику что-то до разработки
 REST API
 для мобильных приложений, HTTP+JSON
 Промежуточный компонент системы
 mailer
 Расширить функционал существующей системы
 сайт на CMS давно работает, хочется добавить
Ссылки
 PHP micro-frameworks (PHP микрофреймворки) |Thinking
 http://thinking.bohdanvorona.name/php-micro-frameworks/
 Top 12 Best PHP RESTful Micro Frameworks (Pro/Con)
 http://www.gajotres.net/best-available-php-restful-micro-frameworks/
 10 Best PHP microframeworks as of 2017 - Slant
 https://www.slant.co/topics/2642/~php-microframeworks
 PHP Microframework vs. Full Stack Framework | Application
Performance Monitoring Blog | AppDynamics
 https://blog.appdynamics.com/engineering/php-microframework-vs-
full-stack-framework/

Weitere ähnliche Inhalte

Was ist angesagt?

06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
DneprCiklumEvents
 
Automation Flex Applications with Selenium rc
Automation  Flex Applications with Selenium rcAutomation  Flex Applications with Selenium rc
Automation Flex Applications with Selenium rc
automated-testing.info
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
drupalconf
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
ZFConf Conference
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
7bits
 

Was ist angesagt? (20)

Symfony2 practice
Symfony2 practiceSymfony2 practice
Symfony2 practice
 
Codeception Introduction
Codeception IntroductionCodeception Introduction
Codeception Introduction
 
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
 
Building better APIs on rails
Building better APIs on railsBuilding better APIs on rails
Building better APIs on rails
 
Сергей Татаринцев — bem-tools v1.0.0
Сергей Татаринцев — bem-tools v1.0.0Сергей Татаринцев — bem-tools v1.0.0
Сергей Татаринцев — bem-tools v1.0.0
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customers
 
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
06 net saturday eugene zharkov ''silverlight. to oob or not to oob''
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переиграл
 
PHP: SAPI
PHP: SAPIPHP: SAPI
PHP: SAPI
 
Roman Gorel: Building better APIs on Rails.
Roman Gorel: Building better APIs on Rails.Roman Gorel: Building better APIs on Rails.
Roman Gorel: Building better APIs on Rails.
 
Automation Flex Applications with Selenium rc
Automation  Flex Applications with Selenium rcAutomation  Flex Applications with Selenium rc
Automation Flex Applications with Selenium rc
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр Кошелев
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 
ZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and MultilingualZFConf 2010: Zend Framework and Multilingual
ZFConf 2010: Zend Framework and Multilingual
 
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
Стажировка-2014, занятие 8. Обзор Sails framework (Node.js)
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
 

Ähnlich wie Микрофреймворки PHP

Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
Stepan Tanasiychuk
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
Alexey Kachayev
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf Conference
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
Fuenteovejuna
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
ZFConf Conference
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
Ontico
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
phpclub
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
solit
 

Ähnlich wie Микрофреймворки PHP (20)

Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demo
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычность
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй это
 
Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)Воюем за ресурсы (ZFConf2011)
Воюем за ресурсы (ZFConf2011)
 
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
ZFConf 2011: Воюем за ресурсы: Повышение производительности Zend Framework пр...
 
Компиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей РоманенкоКомпиляция скриптов PHP. Алексей Романенко
Компиляция скриптов PHP. Алексей Романенко
 
ZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and DoctrineZFConf 2010: Zend Framework and Doctrine
ZFConf 2010: Zend Framework and Doctrine
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОП
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)
 
Почему Mojolicious?
Почему Mojolicious?Почему Mojolicious?
Почему Mojolicious?
 
Mojolicious
MojoliciousMojolicious
Mojolicious
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном коде
 
UWDC 2013, Yii2
UWDC 2013, Yii2UWDC 2013, Yii2
UWDC 2013, Yii2
 
Zend framework 2
Zend framework 2Zend framework 2
Zend framework 2
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопе
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование API
 

Mehr von Ekaterina Giganova

Мария Губайдуллина (Registratura.ru) о лояльности в SMM
Мария Губайдуллина (Registratura.ru) о лояльности в SMMМария Губайдуллина (Registratura.ru) о лояльности в SMM
Мария Губайдуллина (Registratura.ru) о лояльности в SMM
Ekaterina Giganova
 
Артем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиа
Артем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиаАртем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиа
Артем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиа
Ekaterina Giganova
 
Алексей Янин (Websellers): эффективная реклама в социальных медиа
Алексей Янин (Websellers): эффективная реклама в социальных медиаАлексей Янин (Websellers): эффективная реклама в социальных медиа
Алексей Янин (Websellers): эффективная реклама в социальных медиа
Ekaterina Giganova
 
Работа с недовольными клиентами. Алеся Задворнова (Фламп)
Работа с недовольными клиентами. Алеся Задворнова (Фламп)Работа с недовольными клиентами. Алеся Задворнова (Фламп)
Работа с недовольными клиентами. Алеся Задворнова (Фламп)
Ekaterina Giganova
 

Mehr von Ekaterina Giganova (7)

Балансировка нагрузки веб-серверов
Балансировка нагрузки веб-серверовБалансировка нагрузки веб-серверов
Балансировка нагрузки веб-серверов
 
Как хорошо уметь писать. SMM. Издание 2, дополненное. Для занятия 6.10.2014
Как хорошо уметь писать. SMM. Издание 2, дополненное. Для занятия 6.10.2014Как хорошо уметь писать. SMM. Издание 2, дополненное. Для занятия 6.10.2014
Как хорошо уметь писать. SMM. Издание 2, дополненное. Для занятия 6.10.2014
 
Как хорошо писать. SMM и продающие тексты в Интернете
Как хорошо писать. SMM и продающие тексты в ИнтернетеКак хорошо писать. SMM и продающие тексты в Интернете
Как хорошо писать. SMM и продающие тексты в Интернете
 
Мария Губайдуллина (Registratura.ru) о лояльности в SMM
Мария Губайдуллина (Registratura.ru) о лояльности в SMMМария Губайдуллина (Registratura.ru) о лояльности в SMM
Мария Губайдуллина (Registratura.ru) о лояльности в SMM
 
Артем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиа
Артем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиаАртем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиа
Артем Чучакин (Идея Нова) о ботах и мертвых душах в социальных медиа
 
Алексей Янин (Websellers): эффективная реклама в социальных медиа
Алексей Янин (Websellers): эффективная реклама в социальных медиаАлексей Янин (Websellers): эффективная реклама в социальных медиа
Алексей Янин (Websellers): эффективная реклама в социальных медиа
 
Работа с недовольными клиентами. Алеся Задворнова (Фламп)
Работа с недовольными клиентами. Алеся Задворнова (Фламп)Работа с недовольными клиентами. Алеся Задворнова (Фламп)
Работа с недовольными клиентами. Алеся Задворнова (Фламп)
 

Микрофреймворки PHP

  • 2. Для чего  Простые сайты  еще не ZendFramework, но уже неWordpress  Прототип функционала  показать заказчику что-то до разработки  REST API  для мобильных приложений, HTTP+JSON  Промежуточный компонент системы  mailer  Расширить функционал существующей системы  сайт на CMS давно работает, хочется добавить
  • 3. Проблема full-stack фреймворков  Фреймворки обладают огромнейшим функционалом и возможностями.  Но очень часто при разработке небольших проектов, весь функционал фреймворка попросту не нужен, вполне достаточно только неких базовых возможностей.
  • 4. The MicroPHP Manifesto  I am a PHP developer  I am not a Zend Framework or Symfony or CakePHP developer  I think PHP is complicated enough  I like building small things  I like building small things with simple purposes  I like to make things that solve problems  I like building small things that work together to solve larger problems I want less code, not more  I want to write less code, not more  I want to manage less code, not more  I want to support less code, not more  I need to justify every piece of code I add to a project  I like simple, readable code  I want to write code that is easily understood  I want code that is easily verifiable http://microphp.org - Ed Finkler начинать с как можно более легковесной основы
  • 5. Что есть (обычно)  роутинг  базовый MVC  обработка HTTP запросов  обработка ошибок  возможность расширения
  • 6. Чего нет (обычно)  ORM  кэширование  шаблонизатор  мультиязычность  валидация форм  авторизация / аутентификация, роли
  • 7. Lumen  version 5.4  Основан на Laravel  PHP >= 5.6.4  https://lumen.laravel.com  OpenSSL PHP Extension  PDO PHP Extension  Mbstring PHP Extension
  • 8. Lumen: Пример Simple API use IlluminateHttpRequest; $app = require __DIR__ . '/../bootstrap/app.php'; class Dev extends IlluminateDatabaseEloquentModel { protected $table = 'devs'; } $app->get('dev', function() { return response()->json(Dev::all()); }); $app->get('dev/{id}', function($id) { return response()->json(Dev::find($id)); }); $app->post('dev', function(Request $request) { $dev = new Dev(); $dev->name = $request->input('name'); $dev->focus = $request->input('focus'); $dev->hireDate = $request->input('hireDate'); $dev->save(); return response()->json($dev, 201); }); $app->delete('dev/{id}', function($id) { Dev::find($id)->delete(); return response('', 200); }); $app->patch('dev/{id}', function(Request $request, $id) { $dev = Dev::find($id); $dev->name = $request->input('name', $dev->name); $dev->focus = $request->input('focus', $dev->focus); $dev->hireDate = $request->input('hireDate', $dev->hireDate); $dev->save(); return response()->json($dev); }); $app->run(); APP_ENV=local APP_DEBUG=true APP_KEY= APP_TIMEZONE=UTC DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=my_db DB_USERNAME=user1 DB_PASSWORD=b7XES7sw CACHE_DRIVER=memcached QUEUE_DRIVER=sync .env public/index.php
  • 9. Lumen: Особенности  Отличная документация  Очень быстрый  Можно обновиться до Laravel  Размер большой для микрофреймворка  Специализация: micro-services и API  Не включает работу с сессиями и шаблонами
  • 10. Slim  version: 3.8.1  Web server with URL rewriting  PHP 5.5+  https://www.slimframework.com
  • 11. Slim: Пример // index.php: $app->get('/tickets', function(Request $request, Response $response) { $this->logger->addInfo("Ticket list"); $mapper = new TicketMapper($this->db); $tickets = $mapper->getTickets(); $response = $this->view->render($response, "tickets.phtml", ["tickets" => $tickets]); return $response; }); ?> // tickets.phtml: <?php foreach ($tickets as $ticket): ?> <tr> <td><?= $ticket->getTitle() ?></td> <td><?= $ticket->getComponent() ?></td> <td><?= $ticket->getShortDescription() ?> ...</td> <td> <a href="<?= $router->pathFor('ticket-detail', ['id' => $ticket->getId()]) ?>">view</a> </td> </tr> <?php endforeach; ?>
  • 12. Slim: Особенности  HTTP Router  Middleware  PSR-7 Support (HTTP message interfaces)  Dependency Injection  Хорошая документация  Нет ORM  Очень ограниченный функционал
  • 13. Silex  version: 2.0  Symfony2  "php": ">=5.5.9“  https://silex.sensiolabs.org
  • 14. Silex: Пример // --- /public_html/index.php --- // Require the app and run it require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'app' . DIRECTORY_SEPARATOR . 'app.php'; $app->run(); // --- /app/app.php --- // Bootstrap require __DIR__ . DIRECTORY_SEPARATOR . 'bootstrap.php'; // Basic Routing $app->get('/', function(SilexApplication $app) { return 'ohai'; }); // --- /app/bootstrap.php --- // Require Composer Autoloader require_once __DIR__ . DIRECTORY_SEPARATOR . '..' . DIRECTORY_SEPARATOR . 'vendor' . DIRECTORY_SEPARATOR . 'autoload.php'; // Create new Silex App $app = new SilexApplication(); // App Configuration $app['debug'] = true;
  • 15. Silex: Особенности  Не знакомым с Symfony покажется сложным  Очень хорошая документация  Модульный, используйте то, что нужно  Хорош для больших проектов  Медленнее Lumen в 2 раза
  • 16. Phalcon Micro  version: 3.1.1  Phalcon  PHP >= 5.5  https://phalconphp.com  Micro Applications
  • 17. Phalcon Micro: Пример use PhalconDIFactoryDefault, PhalconMvcMicro, PhalconHttpResponse, PhalconHttpRequest; $di = new FactoryDefault(); //Using an anonymous function, the instance will be lazy loaded $di["response"] = function () { return new Response(); }; $di["request"] = function () { return new Request(); }; $app = new Micro(); $app->setDI( $di ); $app->get( '/api', function () use ( $app ) { echo "Welcome"; } ); $app->post( '/api', function () use ( $app ) { $post = $app->request->getPost(); print_r( $post ); } ); $app->notFound( function () use ( $app ) { $app->response->setStatusCode( 404, "Not Found" )->sendHeaders(); echo 'This is crazy, but this page was not found!'; } ); $app->handle();
  • 18. Phalcon Micro: Особенности  PHP extension (C)  Самый быстрый  Отличная документация  Для дебага надо знать C или Zephir
  • 19. Для чего (повтор)  Простые сайты  еще не ZendFramework, но уже неWordpress  Прототип функционала  показать заказчику что-то до разработки  REST API  для мобильных приложений, HTTP+JSON  Промежуточный компонент системы  mailer  Расширить функционал существующей системы  сайт на CMS давно работает, хочется добавить
  • 20. Ссылки  PHP micro-frameworks (PHP микрофреймворки) |Thinking  http://thinking.bohdanvorona.name/php-micro-frameworks/  Top 12 Best PHP RESTful Micro Frameworks (Pro/Con)  http://www.gajotres.net/best-available-php-restful-micro-frameworks/  10 Best PHP microframeworks as of 2017 - Slant  https://www.slant.co/topics/2642/~php-microframeworks  PHP Microframework vs. Full Stack Framework | Application Performance Monitoring Blog | AppDynamics  https://blog.appdynamics.com/engineering/php-microframework-vs- full-stack-framework/