SlideShare a Scribd company logo
1 of 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/

More Related Content

What's hot

Symfony2 practice
Symfony2 practiceSymfony2 practice
Symfony2 practiceSkorney
 
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBench
2015-12-05 Вадим Литвинов - Нагрузочное тестирование с MZBenchHappyDev
 
Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0Alexander manuhin selenium_php_v2.0
Alexander manuhin selenium_php_v2.0matroskin1980
 
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium Автоматизируем тестирование UI с Ruby, Cucumber и Selenium
Автоматизируем тестирование UI с Ruby, Cucumber и Selenium SQALab
 
Building better APIs on rails
Building better APIs on railsBuilding better APIs on rails
Building better APIs on railsRoman Gorel
 
Сергей Татаринцев — bem-tools v1.0.0
Сергей Татаринцев — bem-tools v1.0.0Сергей Татаринцев — bem-tools v1.0.0
Сергей Татаринцев — bem-tools v1.0.0Yandex
 
Top 10 problems supporting Magento customers
Top 10 problems supporting Magento customersTop 10 problems supporting Magento customers
Top 10 problems supporting Magento customersaheadWorks
 
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
 
Angular 2: Всех переиграл
Angular 2: Всех переигралAngular 2: Всех переиграл
Angular 2: Всех переигралEugene Zharkov
 
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.Sphere Consulting Inc
 
Automation Flex Applications with Selenium rc
Automation  Flex Applications with Selenium rcAutomation  Flex Applications with Selenium rc
Automation Flex Applications with Selenium rcautomated-testing.info
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Владимир Еремин. Extending Openstack. PyCon Belarus 2015
Владимир Еремин. Extending Openstack. PyCon Belarus 2015Alina Dolgikh
 
Продвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевПродвинутое использование Celery — Александр Кошелев
Продвинутое использование Celery — Александр КошелевYandex
 
Устройство фреймворка 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 MultilingualZFConf 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
 
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»
«Continuous Integration — A to Z или Непрерывная интеграция — кто всё сломал?»FDConf
 

What's hot (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 или Непрерывная интеграция — кто всё сломал?»
 

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

Saint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demoSaint Perl 2009: CGI::Ajax demo
Saint Perl 2009: CGI::Ajax demomegakott
 
Zend Framework и мультиязычность
Zend Framework и мультиязычностьZend Framework и мультиязычность
Zend Framework и мультиязычностьStepan Tanasiychuk
 
Инструментируй это
Инструментируй этоИнструментируй это
Инструментируй этоRoman Dvornov
 
Воюем за ресурсы (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 DoctrineZFConf Conference
 
Чуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПЧуть сложнее чем Singleton: аннотации, IOC, АОП
Чуть сложнее чем Singleton: аннотации, IOC, АОПKirill Chebunin
 
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...
Валерий Чугреев, ИСЭРТ РАН — Архитектура MVC в контексте web-разработки — про...Dev_Party
 
Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Компиляция скриптов PHP (Алексей Романенко)
Компиляция скриптов PHP (Алексей Романенко)Ontico
 
Что нового в PHP-5.3
Что нового в PHP-5.3 Что нового в PHP-5.3
Что нового в PHP-5.3 phpclub
 
Страх и ненависть в исходном коде
Страх и ненависть в исходном кодеСтрах и ненависть в исходном коде
Страх и ненависть в исходном кодеKolya Korobochkin
 
Silverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеSilverlight 4, есть ли жизнь на десктопе
Silverlight 4, есть ли жизнь на десктопеAlex Tumanoff
 
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей ВасилийSolit 2014, Минусы ООП на примере языка PHP, Соловей Василий
Solit 2014, Минусы ООП на примере языка PHP, Соловей Василийsolit
 
Нельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIНельзя просто так взять и сделать версионирование API
Нельзя просто так взять и сделать версионирование APIEatDog
 

Similar to Микрофреймворки 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
 

More from Ekaterina Giganova

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

More from 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/