SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Ice 
PHP Framework 
Preview Release 
(version 0) 
http://iceframework.net 
https://github.com/ifacesoft/ice 
http://vk.com/iceframework 
Денис Шестаков 
dp <denis.a.shestakov@gmail.com> 
(c) 2014 Ifacesoft | dp – BSD ICE 
октябрь 2014
Особенности. Ничем не хуже ;) 
● ПРОСТ в изучении и использовании; 
● Невероятно БЫСТР в при настройках по умолчанию; 
● Легко поддается РАСШИРЕНИЮ; 
● Из коробки Вы получаете болшинство возможностей, 
доступных в других популярных фреймворках; 
● Размер исходного кода не превышает 7 Мб – ничего 
лишнего; 
● Возможность использования сторонних библиотек через 
composer; 
● Встроенная поддержка JQuery, Bootstrap; 
● Располагает удобными средствами логгирования и отладки; 
● Распространяется под открытой копилефт-лицензией. 
И много других приятных мелочей...
Архитектура. Велосипед внатуре) 
● Ice требует версии php 5.4 и выше; 
● Модульная структура приложений; 
● Каждый экшен – отдельный класс; 
● Универсальный класслоадер; 
● Обязательный маппинг схемы данных; 
● Гибкая система конфигурации; 
● Кеширование большинства сущностей; 
● Быстрый доступ объектов из контейнера. 
Удобство и понятность первыше всего
Что умеет Ice? Много чего... 
● Route: Роутинг через конфигурационный файл. Гибкая и понятная настройка; 
● Config: Очень и очень гибкое конфигурирование. Возможность 
переопределить, дополнить любой параметр конфигурации. 
● Environment: Возможность настроить свое окружение (достуны 3 окружения: 
production, test и development) 
● Action: Иерархический вызов экшена. Удобное конфигурирование и много 
удобных плюшек (переопределение дефолтных значений); 
● View_Render: Рендер любым из доступных рендеров в любой момент времени 
(доступны: Ice:Php, Ice:Smarty, Ice:Twig и др.); 
Data_Provider: Получение и сохранение данных в поставщиках (доступно: 
Ice:Apc, Ice:Redis, Ice:Mysqli, Ice:Registry, Ice:Session и много других); 
● Data_Source: Операции с источником данных - CRUD (пока доступен только 
Ice:Mysqli); 
● Query_Builder: Построение запроса в источнику данных; 
● Code_Generator: Автогенерация экшенов, моделей и шаблонов; 
● Validator: Их мало, но они есть. Создать свой – ноль проблем;); 
● а также Form, Logger и другое (см. IceCore*).
Структура модуля 
Любой модуль состоит из директорий: 
● Config – Конфигурационные файлы 
● Resource – Ресурсы модуля (javasript, css, 
images, файлы локализации 
● Source – Исходный код модуля 
● Web – Document root веб-приложения 
● Var – Служебные файлы 
Продуманная организация файлов проекта
Как работает Ice? Все просто) 
Model-View-Co... Command(Action)
Новый проект в 3 команды 
● Скачиваем Composer 
$ curl -s http://getcomposer.org/installer | php 
● С помощью Composer-а 
устанавливаем фреймфорк Ice 
$ php composer.phar create-project ifacesoft/ice Ice dev-master 
● Создаем новый проект (модуль Ice) 
$ ./Ice/cli Ice:Module_Create 
У Вас все получится. 
Удачи!
Модульность и с чем ее едят.. 
Конфиг модуля Blog (Config/Ice/Core/Module.php): 
return [ 
'alias' => 'Blog', 
'module' => [ 
'name' => 'my blog', 
'url' => '', 
'authors' => '', 
'vcs' => 'mercurial', 
'source' => '', 
], 
'modules' => [ 
ROOT_DIR . 'DbManager' => 'default' 
ICE_DIR => '0.0' 
] 
]; 
● Как мы видим, конфиг задает параметры текущего модуля и 
определяет его зависимости от других модулей (DbManager и 
Ice – путь до фреймворка). 
● Зависимости иерархичны, таким образом текущий модуль зависит 
не только от указанных модулей, но и от их зависимостей тоже. 
(Список модулей Model::get() возвращает абсолютно все 
модули в отсортированном виде)
3 окружения вашего проекта 
● Production: Боевые настройки модуля – все что нужно кеширутся, отключен 
вывод ошибок и т. д. 
● Test: Мягкое кеширование (в файл или другое хранилище), включен полный 
дебаг. 
● Development: Кеширование отключено, работает автокодогенератор и др. 
Определяем окружения в главном конфигурационном файле 
(Config/Ice/Core/Config.php) 
'IceCoreEnvironment' => [ 
'environments' => [ 
'/blog.global$/' => 'production', 
'/blog.test$/' => 'test', 
'/blog.local$/' => 'development', 
], 
], 
● Окружения идентифицируются по хосту 
● Настройки каждого из окружений определяются в другом файле 
конфигураций(Config/Ice/Core/Environment.php) 
Необходимо отметить, что настройки окружения наследуются 
и переопределяют настройки выше стоящего окружения.
Route. Мощно, да? 
● Все маршруты определены в файле конфигурации 
роутов (Config/Ice/Core/Route.php) 
return [ 
'blog_post' => [ 
'route' => '/blog/cabinet/{$blogTranslit}/post/{$postTranslit}', 
'GET' => [ 
'actions' => [ 
'main' => 'Blog:Cabinet_Post_Index', 
'title' => ['Ice:Title' => ['title' => 'Cabinet - Post']] 
], 
'layout' => 'Blog:Layout_Cabinet', 
'params' => [ 
'blogTranslit' => '([^/]+)', 
'postTranslit' => ['([^/]+)', true] 
], 
], 
'weight' => 1000 
] 
]; 
На все случаи жизни;)
Co.. Command (Action) 
● Экшен – это отдельный класс; 
● Конфигурируется через поле $config или конфигурационный 
файл; 
● Реализуется всего один метод run. 
<?php 
namespace BlogAction; 
use IceCoreAction; 
use IceCoreAction_Context; 
class Index extends Action 
{ 
public static $config = [ 
'viewRenderClassName' => 'Ice:Smarty', 
]; 
protected function run(array $input, Action_Context $actionContext) 
{ 
return ['errors' => 'Need implement run() method of action class Index.']; 
} 
}
Model. Логично и интуитивно! 
● Создание модели: $message = Message::create(['text'=>'message']); 
● Сохранение модели: $message = $message->insert(); 
● Изменение модели: $message->update(['text' => 'text', 'author' => 'me']); 
● Получение всех полей модели: $fields = $message->get(); 
● Получение первичного ключа: $pk = $message->getPk(); 
● Получение модели: $message = Message::getModel($pk, ['text']); 
● Получение модели по полю: $message = Message::getBy('author', 'me', ['text']); 
● Удаление модели: $message->delete(); 
● Получение коллекции моделей: $collection = Message::getCollection(); 
● Получение маппинга полей: $mapping = Message::getMapping(); 
● Получение схемы модели: $scheme = Message::getScheme(); 
● Получить форму модели; $form = Message::getForm(); 
● и много другого... 
Возможности поистине колоссальны. (см. Ice/Core/Model.php)
View и View_Render 
Из коробки 3 самых популятных шаблонизатора: 
● Php; 
● Smarty; 
● Twig. 
Особенности: 
● Независимый рендер различных 
представлений в одном запросе(сессии); 
● Кеширование результата рендера; 
● И другое..
Query и Query_Builder – он крутой! 
● Получение билдера: $qb = Message::getQueryBuilder(); 
● Построение запроса select: $q = $qb->select(['/pk', 'text', 'author')->eq('author', 'me')->limit(1)->getQuery(); 
● Получение данных или модели из запроса: $data = $q->getData() или $model = $q->getModel(); 
SELECT `message_pk`, `text`, `author` from blog_message Message WHERE `author`=”me” LIMIT 0,1 
● Запрос на вставку данных: $qb->insert(['text'=>'text2', 'author'=>'me'])->getQuery()->getData(); 
INSERT INTO blog_message (`text`, `author`) VALUES (“text2”, “me”) 
● Запрос на изменение данных: $qb->update(['text'=>'text3'])->eq('author', 'me')->getQuery()->getData(); 
UPDATE blog_message SET `text`=”text3” WHERE `author`=”me” 
● Запрос на удаление данных: $qb->delete([3, 5])->ne('author', 'me')->getQuery()->getData(); 
DELETE blog_message WHERE `message_pk` in (3,5) AND `author` <> “me” 
● Запрос с join: $qb->select('text', 't')->left('Blog:Post', ['/name', 'owner'])->eq('author', 'me')->getQuery()->getData(); 
SELECT Message.`text` as `t`, Post.`post_name`, Post.`owner` 
FROM blog_message Message 
LEFT JOIN blog_post Post ON (Post.`post_pk`=Message.`post__fk`) 
WHERE Message.`author`=”me” 
Это лишь малая часть доступных возможностей
Data – Результат запроса 
● Преобразование данных в модель: $model = $data->getModel(); 
● Преобразование данных в коллекцию: $collection = $data->getColledtion(); 
● Получение массива записей: $rows = $data->getRows(); 
● Получение одной записи: $row = $data->getRow(); 
● Получение колонки значений: $values = $data->getColumn(); 
● Получение единственного значения: $value = $data->getValue(); 
● Получение всех первичных ключей: $keys => $data->getKeys(); 
Вообще Data заслуживает более пристального внимания, но 
для начала этой информации хватит
Containers. Они есть 
● Быстрое получение объекта из 
контенера: Class::getInstance($key); 
● Хранение объектов в любом дата 
провайдере; 
● Встроенное кеширование; 
● Автокодогенерация; 
● Простота реализации. 
На самом деле очень удобно
Data_Provider 
● Все данные мы получаем именно из источника 
данных, будь то ключ-значение хранилище, 
база данных или обычный http-запрос. 
● Настройка через конфиг окружений: для каждого 
окружения могут быть определены свои 
настройки 
● В любой момент мы можем получить доступ к 
необходимому источнику и передать, либо 
получить данные из него. 
Предсказуемое поведение
Data_Source 
● Простое конфигурирование 
● Переключение между схемами 
● Реализация SELECT, INSERT, UPDATE, 
DELETE 
● Методы получения дата схемы (таблицы, 
колонки, поля и их типы) 
Ты их не видешь, а они есть)
Form 
Типы полей формы: 
● Hidden 
● Text 
● Date 
● Checkbox 
● Number 
● Textarea 
Создание формы 
$form = Form::getInstance($formType) 
->text('name', 'Имя', 'введите свое имя', ['Ice:Not_Empty', 'Ice:Length_Min' => 3)]) 
->text('email', 'Email', 'Enter your email', 'Ice:Email'); 
Сабмит формы 
$form->submit(); 
Поля формы провалидируются автоматически
Validator 
Варианты схемы валидации: 
$validateScheme = [ 
'FIELD_NAME' => 'VALIDATOR_NAME' 
]; 
$validateScheme = [ 
FIELD_NAME' => [ 
'VALIDATOR_NAME' => 'VALIDATOR_PARAM' 
] 
]; 
$validateScheme = [ 
'FIELD_NAME' => [ 
'VALIDATOR_NAME' => [ 
'params' => [ 
'VALIDATOR_PARAM_NAME1' => 'VALIDATOR_PARAM_VALUE1', 
'VALIDATOR_PARAM_NAME2 => 'VALIDATOR_PARAM_VALUE2' 
], 
'message => 'validate failed for {$0}' 
] 
] 
]; 
Пример: 
If (Validator::getInstance('Ice:Email')->validate('q.w@er.ty')) { 
Return 'valid'; 
}
Code_Generator 
На данный момент доступно: 
● Генерация экшенов; 
● Генерация моделей; 
● Генерация валидаторов; 
● Генерацмя шаблонов для 3-х шаблонизаторов (Php, 
Smarty и Twig) 
Этот список со временем будет только расширяться
Консольные команды 
● Консольный интерфейс работает в 
интерактивном режиме 
● Экшены, вызванные из консоли обладают 
всеми теми же возможностями что и 
экшены, выполняемые после http- 
запроса. 
Примеры вызовов: 
Создание модуля: $ ./Ice/cli Ice:Module_Create 
Деполой модуля: $ ./MyProject/cli Ice:Module_Deploy 
Обновление вендоров: $ ./MyProject/cli Ice:Composer_Update
Не далекое будущее Ice 
● Миграции; 
● Автокеширование экшенов; 
● Уменьшение времени бустраппинга; 
● Продолжение докуменирования кода (на 100%); 
● Наполение хендбука, кукбука и осталього; 
● Инсталятор готовых модулей; 
● Добавление модулей в текущий модуль; 
● Реализация Menu; 
● Реализация Auth_Provider; 
● Реализация Message_Provider; 
● Безопасность. Роли. ACL; 
● Демонстрационные модули (GuestBook, Blog, DbManager) 
Вот не полный перечень задуманного на это год! ;-)
Если Вы это видете, 
большое человеческое Спасибо!

Mais conteúdo relacionado

Mais procurados

09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворкиRoman Brovko
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)Ontico
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкRoman Dvornov
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС2ГИС Технологии
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Ilyas Salikhov
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript ApplicationMikhail Davydov
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupalCamp Kyiv Рысь
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXMLSlach
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизацияRoman Brovko
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.Igor Shkulipa
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорьdrupalconf
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5Technopark
 
хранение данных
хранение данныххранение данных
хранение данныхNoveo
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...PavelKonotopov
 
Повышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаПовышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаВладимир Колос
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиентыRoman Brovko
 
Александр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated usersАлександр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated usersLEDC 2016
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.Igor Shkulipa
 

Mais procurados (20)

09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки09 - Web-технологии. MVC фреймворки
09 - Web-технологии. MVC фреймворки
 
Суперсилы Chrome developer tools
Суперсилы Chrome developer toolsСуперсилы Chrome developer tools
Суперсилы Chrome developer tools
 
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
MySQL 5.7 - NoSQL - JSON, Protocol X, Document Store / Петр Зайцев (Percona)
 
basis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворкbasis.js - почему я не бросил разрабатывать свой фреймворк
basis.js - почему я не бросил разрабатывать свой фреймворк
 
Drupal 7 and History.js
Drupal 7 and History.jsDrupal 7 and History.js
Drupal 7 and History.js
 
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИСTARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
TARS: Сделай уровень frontend-рутины 0% — Артём Малко, 2ГИС
 
Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2Расширенное кеширование в Doctrine2
Расширенное кеширование в Doctrine2
 
Making Scalable JavaScript Application
Making Scalable JavaScript ApplicationMaking Scalable JavaScript Application
Making Scalable JavaScript Application
 
Drupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайтDrupal 7 и history.js или как ajax инфицировать сайт
Drupal 7 и history.js или как ajax инфицировать сайт
 
XML Native Database на примере SednaXML
XML Native Database на примере SednaXMLXML Native Database на примере SednaXML
XML Native Database на примере SednaXML
 
15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация15 - Web-технологии. Сессии и авторизация
15 - Web-технологии. Сессии и авторизация
 
JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.JavaScript Базовый. Занятие 11.
JavaScript Базовый. Занятие 11.
 
Easy authcache 2 кеширование для pro родионов игорь
Easy authcache 2   кеширование для pro родионов игорьEasy authcache 2   кеширование для pro родионов игорь
Easy authcache 2 кеширование для pro родионов игорь
 
Web осень 2013 лекция 5
Web осень 2013 лекция 5Web осень 2013 лекция 5
Web осень 2013 лекция 5
 
хранение данных
хранение данныххранение данных
хранение данных
 
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
Building the Enterprise infrastructure with PostgreSQL as the basis for stori...
 
Повышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайтаПовышаем производительность Drupal-сайта
Повышаем производительность Drupal-сайта
 
02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты02 - Web-технологии. Web-клиенты
02 - Web-технологии. Web-клиенты
 
Александр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated usersАлександр Шуменко - Varnish for authenticated users
Александр Шуменко - Varnish for authenticated users
 
JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.JavaScript Базовый. Занятие 07.
JavaScript Базовый. Занятие 07.
 

Destaque

Ice presentation 2014+diz_december3_s
Ice presentation 2014+diz_december3_sIce presentation 2014+diz_december3_s
Ice presentation 2014+diz_december3_sAndrey Mayorov
 
Scary slides @powerfulpoint
Scary slides @powerfulpointScary slides @powerfulpoint
Scary slides @powerfulpointGavin McMahon
 
Text Me: Do's & Don'ts of Presentation Design
Text Me: Do's & Don'ts of Presentation DesignText Me: Do's & Don'ts of Presentation Design
Text Me: Do's & Don'ts of Presentation DesignEthos3
 
How to Use Color Wisely
How to Use Color WiselyHow to Use Color Wisely
How to Use Color WiselyEthos3
 
Шаблон презентации о Компании в PowerPoint (B2B)
Шаблон презентации о Компании в PowerPoint (B2B)Шаблон презентации о Компании в PowerPoint (B2B)
Шаблон презентации о Компании в PowerPoint (B2B)Слайдстор
 
Making your slides lighter
Making your slides lighterMaking your slides lighter
Making your slides lighterAlexei Kapterev
 
Презентация бизнес-плана кафе
Презентация бизнес-плана кафеПрезентация бизнес-плана кафе
Презентация бизнес-плана кафеFinancial Outsourcing Centre
 
Internet Trends 2014 - Redesigned
Internet Trends 2014 - RedesignedInternet Trends 2014 - Redesigned
Internet Trends 2014 - RedesignedEmiland
 
Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)
Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)
Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)Ilya Korolev
 
Sample slides by Garr Reynolds
Sample slides by Garr ReynoldsSample slides by Garr Reynolds
Sample slides by Garr Reynoldsgarr
 
7 Tips to Beautiful PowerPoint by @itseugenec
7 Tips to Beautiful PowerPoint by @itseugenec7 Tips to Beautiful PowerPoint by @itseugenec
7 Tips to Beautiful PowerPoint by @itseugenecEugene Cheng
 
Healthcare Napkins All
Healthcare Napkins AllHealthcare Napkins All
Healthcare Napkins AllDan Roam
 
Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Emiland
 

Destaque (16)

Ice presentation 2014+diz_december3_s
Ice presentation 2014+diz_december3_sIce presentation 2014+diz_december3_s
Ice presentation 2014+diz_december3_s
 
Scary slides @powerfulpoint
Scary slides @powerfulpointScary slides @powerfulpoint
Scary slides @powerfulpoint
 
Text Me: Do's & Don'ts of Presentation Design
Text Me: Do's & Don'ts of Presentation DesignText Me: Do's & Don'ts of Presentation Design
Text Me: Do's & Don'ts of Presentation Design
 
How to Use Color Wisely
How to Use Color WiselyHow to Use Color Wisely
How to Use Color Wisely
 
Шаблон презентации о Компании в PowerPoint (B2B)
Шаблон презентации о Компании в PowerPoint (B2B)Шаблон презентации о Компании в PowerPoint (B2B)
Шаблон презентации о Компании в PowerPoint (B2B)
 
Sharpen your point
Sharpen your point Sharpen your point
Sharpen your point
 
Making your slides lighter
Making your slides lighterMaking your slides lighter
Making your slides lighter
 
Презентация бизнес-плана кафе
Презентация бизнес-плана кафеПрезентация бизнес-плана кафе
Презентация бизнес-плана кафе
 
Internet Trends 2014 - Redesigned
Internet Trends 2014 - RedesignedInternet Trends 2014 - Redesigned
Internet Trends 2014 - Redesigned
 
Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)
Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)
Шаблон инвестиционной презентации ver. 1.3 (ФРИИ edition)
 
Sample slides by Garr Reynolds
Sample slides by Garr ReynoldsSample slides by Garr Reynolds
Sample slides by Garr Reynolds
 
Slides That Rock
Slides That RockSlides That Rock
Slides That Rock
 
7 Tips to Beautiful PowerPoint by @itseugenec
7 Tips to Beautiful PowerPoint by @itseugenec7 Tips to Beautiful PowerPoint by @itseugenec
7 Tips to Beautiful PowerPoint by @itseugenec
 
You Suck At PowerPoint! by @jessedee
You Suck At PowerPoint! by @jessedeeYou Suck At PowerPoint! by @jessedee
You Suck At PowerPoint! by @jessedee
 
Healthcare Napkins All
Healthcare Napkins AllHealthcare Napkins All
Healthcare Napkins All
 
Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.Dear NSA, let me take care of your slides.
Dear NSA, let me take care of your slides.
 

Semelhante a Ice Php Framework Preview Release

И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоStanfy
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов ИгорьPVasili
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"oelifantiev
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...DrupalCamp MSK
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к AnsibleIvan Grishaev
 
nginx internals
nginx internalsnginx internals
nginx internalsredivy
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration managementAlexander Kirillov
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORMMikhail Shamin
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf Conference
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEBAlexandre Kalendarev
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPITimur Shemsedinov
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Symfoniacs
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктуройdddpaul
 
Psgi app
Psgi appPsgi app
Psgi appund3f
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработкиAnna Fedoruk
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotkidrupalconf
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Александр Егурцов
 

Semelhante a Ice Php Framework Preview Release (20)

И снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел ТайкалоИ снова разработка под iOS. Павел Тайкало
И снова разработка под iOS. Павел Тайкало
 
Easy authcache 2 кэширование для pro. Родионов Игорь
Easy authcache 2   кэширование для pro. Родионов ИгорьEasy authcache 2   кэширование для pro. Родионов Игорь
Easy authcache 2 кэширование для pro. Родионов Игорь
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
Continuous integration сайтов на Drupal: Jenkins, Bitbucket, Features, Drush ...
 
От Make к Ansible
От Make к AnsibleОт Make к Ansible
От Make к Ansible
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
nginx internals
nginx internalsnginx internals
nginx internals
 
Application deployment & configuration management
Application deployment & configuration managementApplication deployment & configuration management
Application deployment & configuration management
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Толстая модель. История разработки ORM
Толстая модель. История разработки ORMТолстая модель. История разработки ORM
Толстая модель. История разработки ORM
 
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
ZFConf 2011: Толстая модель: История разработки собственного ORM (Михаил Шамин)
 
Использование Sedna в WEB
Использование Sedna в WEBИспользование Sedna в WEB
Использование Sedna в WEB
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
Расширенное кеширование Doctrine2 (Ильяс Салихов, Intaro)
 
php frameworks
php frameworksphp frameworks
php frameworks
 
Управление облачной инфраструктурой
Управление облачной инфраструктуройУправление облачной инфраструктурой
Управление облачной инфраструктурой
 
Psgi app
Psgi appPsgi app
Psgi app
 
Drupal организация разработки
Drupal   организация разработкиDrupal   организация разработки
Drupal организация разработки
 
Drupal -organizaciya_razrabotki
Drupal  -organizaciya_razrabotkiDrupal  -organizaciya_razrabotki
Drupal -organizaciya_razrabotki
 
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)Устройство фреймворка symfony 2 (http://frontend-dev.ru)
Устройство фреймворка symfony 2 (http://frontend-dev.ru)
 

Ice Php Framework Preview Release

  • 1. Ice PHP Framework Preview Release (version 0) http://iceframework.net https://github.com/ifacesoft/ice http://vk.com/iceframework Денис Шестаков dp <denis.a.shestakov@gmail.com> (c) 2014 Ifacesoft | dp – BSD ICE октябрь 2014
  • 2. Особенности. Ничем не хуже ;) ● ПРОСТ в изучении и использовании; ● Невероятно БЫСТР в при настройках по умолчанию; ● Легко поддается РАСШИРЕНИЮ; ● Из коробки Вы получаете болшинство возможностей, доступных в других популярных фреймворках; ● Размер исходного кода не превышает 7 Мб – ничего лишнего; ● Возможность использования сторонних библиотек через composer; ● Встроенная поддержка JQuery, Bootstrap; ● Располагает удобными средствами логгирования и отладки; ● Распространяется под открытой копилефт-лицензией. И много других приятных мелочей...
  • 3. Архитектура. Велосипед внатуре) ● Ice требует версии php 5.4 и выше; ● Модульная структура приложений; ● Каждый экшен – отдельный класс; ● Универсальный класслоадер; ● Обязательный маппинг схемы данных; ● Гибкая система конфигурации; ● Кеширование большинства сущностей; ● Быстрый доступ объектов из контейнера. Удобство и понятность первыше всего
  • 4. Что умеет Ice? Много чего... ● Route: Роутинг через конфигурационный файл. Гибкая и понятная настройка; ● Config: Очень и очень гибкое конфигурирование. Возможность переопределить, дополнить любой параметр конфигурации. ● Environment: Возможность настроить свое окружение (достуны 3 окружения: production, test и development) ● Action: Иерархический вызов экшена. Удобное конфигурирование и много удобных плюшек (переопределение дефолтных значений); ● View_Render: Рендер любым из доступных рендеров в любой момент времени (доступны: Ice:Php, Ice:Smarty, Ice:Twig и др.); Data_Provider: Получение и сохранение данных в поставщиках (доступно: Ice:Apc, Ice:Redis, Ice:Mysqli, Ice:Registry, Ice:Session и много других); ● Data_Source: Операции с источником данных - CRUD (пока доступен только Ice:Mysqli); ● Query_Builder: Построение запроса в источнику данных; ● Code_Generator: Автогенерация экшенов, моделей и шаблонов; ● Validator: Их мало, но они есть. Создать свой – ноль проблем;); ● а также Form, Logger и другое (см. IceCore*).
  • 5. Структура модуля Любой модуль состоит из директорий: ● Config – Конфигурационные файлы ● Resource – Ресурсы модуля (javasript, css, images, файлы локализации ● Source – Исходный код модуля ● Web – Document root веб-приложения ● Var – Служебные файлы Продуманная организация файлов проекта
  • 6. Как работает Ice? Все просто) Model-View-Co... Command(Action)
  • 7. Новый проект в 3 команды ● Скачиваем Composer $ curl -s http://getcomposer.org/installer | php ● С помощью Composer-а устанавливаем фреймфорк Ice $ php composer.phar create-project ifacesoft/ice Ice dev-master ● Создаем новый проект (модуль Ice) $ ./Ice/cli Ice:Module_Create У Вас все получится. Удачи!
  • 8. Модульность и с чем ее едят.. Конфиг модуля Blog (Config/Ice/Core/Module.php): return [ 'alias' => 'Blog', 'module' => [ 'name' => 'my blog', 'url' => '', 'authors' => '', 'vcs' => 'mercurial', 'source' => '', ], 'modules' => [ ROOT_DIR . 'DbManager' => 'default' ICE_DIR => '0.0' ] ]; ● Как мы видим, конфиг задает параметры текущего модуля и определяет его зависимости от других модулей (DbManager и Ice – путь до фреймворка). ● Зависимости иерархичны, таким образом текущий модуль зависит не только от указанных модулей, но и от их зависимостей тоже. (Список модулей Model::get() возвращает абсолютно все модули в отсортированном виде)
  • 9. 3 окружения вашего проекта ● Production: Боевые настройки модуля – все что нужно кеширутся, отключен вывод ошибок и т. д. ● Test: Мягкое кеширование (в файл или другое хранилище), включен полный дебаг. ● Development: Кеширование отключено, работает автокодогенератор и др. Определяем окружения в главном конфигурационном файле (Config/Ice/Core/Config.php) 'IceCoreEnvironment' => [ 'environments' => [ '/blog.global$/' => 'production', '/blog.test$/' => 'test', '/blog.local$/' => 'development', ], ], ● Окружения идентифицируются по хосту ● Настройки каждого из окружений определяются в другом файле конфигураций(Config/Ice/Core/Environment.php) Необходимо отметить, что настройки окружения наследуются и переопределяют настройки выше стоящего окружения.
  • 10. Route. Мощно, да? ● Все маршруты определены в файле конфигурации роутов (Config/Ice/Core/Route.php) return [ 'blog_post' => [ 'route' => '/blog/cabinet/{$blogTranslit}/post/{$postTranslit}', 'GET' => [ 'actions' => [ 'main' => 'Blog:Cabinet_Post_Index', 'title' => ['Ice:Title' => ['title' => 'Cabinet - Post']] ], 'layout' => 'Blog:Layout_Cabinet', 'params' => [ 'blogTranslit' => '([^/]+)', 'postTranslit' => ['([^/]+)', true] ], ], 'weight' => 1000 ] ]; На все случаи жизни;)
  • 11. Co.. Command (Action) ● Экшен – это отдельный класс; ● Конфигурируется через поле $config или конфигурационный файл; ● Реализуется всего один метод run. <?php namespace BlogAction; use IceCoreAction; use IceCoreAction_Context; class Index extends Action { public static $config = [ 'viewRenderClassName' => 'Ice:Smarty', ]; protected function run(array $input, Action_Context $actionContext) { return ['errors' => 'Need implement run() method of action class Index.']; } }
  • 12. Model. Логично и интуитивно! ● Создание модели: $message = Message::create(['text'=>'message']); ● Сохранение модели: $message = $message->insert(); ● Изменение модели: $message->update(['text' => 'text', 'author' => 'me']); ● Получение всех полей модели: $fields = $message->get(); ● Получение первичного ключа: $pk = $message->getPk(); ● Получение модели: $message = Message::getModel($pk, ['text']); ● Получение модели по полю: $message = Message::getBy('author', 'me', ['text']); ● Удаление модели: $message->delete(); ● Получение коллекции моделей: $collection = Message::getCollection(); ● Получение маппинга полей: $mapping = Message::getMapping(); ● Получение схемы модели: $scheme = Message::getScheme(); ● Получить форму модели; $form = Message::getForm(); ● и много другого... Возможности поистине колоссальны. (см. Ice/Core/Model.php)
  • 13. View и View_Render Из коробки 3 самых популятных шаблонизатора: ● Php; ● Smarty; ● Twig. Особенности: ● Независимый рендер различных представлений в одном запросе(сессии); ● Кеширование результата рендера; ● И другое..
  • 14. Query и Query_Builder – он крутой! ● Получение билдера: $qb = Message::getQueryBuilder(); ● Построение запроса select: $q = $qb->select(['/pk', 'text', 'author')->eq('author', 'me')->limit(1)->getQuery(); ● Получение данных или модели из запроса: $data = $q->getData() или $model = $q->getModel(); SELECT `message_pk`, `text`, `author` from blog_message Message WHERE `author`=”me” LIMIT 0,1 ● Запрос на вставку данных: $qb->insert(['text'=>'text2', 'author'=>'me'])->getQuery()->getData(); INSERT INTO blog_message (`text`, `author`) VALUES (“text2”, “me”) ● Запрос на изменение данных: $qb->update(['text'=>'text3'])->eq('author', 'me')->getQuery()->getData(); UPDATE blog_message SET `text`=”text3” WHERE `author`=”me” ● Запрос на удаление данных: $qb->delete([3, 5])->ne('author', 'me')->getQuery()->getData(); DELETE blog_message WHERE `message_pk` in (3,5) AND `author` <> “me” ● Запрос с join: $qb->select('text', 't')->left('Blog:Post', ['/name', 'owner'])->eq('author', 'me')->getQuery()->getData(); SELECT Message.`text` as `t`, Post.`post_name`, Post.`owner` FROM blog_message Message LEFT JOIN blog_post Post ON (Post.`post_pk`=Message.`post__fk`) WHERE Message.`author`=”me” Это лишь малая часть доступных возможностей
  • 15. Data – Результат запроса ● Преобразование данных в модель: $model = $data->getModel(); ● Преобразование данных в коллекцию: $collection = $data->getColledtion(); ● Получение массива записей: $rows = $data->getRows(); ● Получение одной записи: $row = $data->getRow(); ● Получение колонки значений: $values = $data->getColumn(); ● Получение единственного значения: $value = $data->getValue(); ● Получение всех первичных ключей: $keys => $data->getKeys(); Вообще Data заслуживает более пристального внимания, но для начала этой информации хватит
  • 16. Containers. Они есть ● Быстрое получение объекта из контенера: Class::getInstance($key); ● Хранение объектов в любом дата провайдере; ● Встроенное кеширование; ● Автокодогенерация; ● Простота реализации. На самом деле очень удобно
  • 17. Data_Provider ● Все данные мы получаем именно из источника данных, будь то ключ-значение хранилище, база данных или обычный http-запрос. ● Настройка через конфиг окружений: для каждого окружения могут быть определены свои настройки ● В любой момент мы можем получить доступ к необходимому источнику и передать, либо получить данные из него. Предсказуемое поведение
  • 18. Data_Source ● Простое конфигурирование ● Переключение между схемами ● Реализация SELECT, INSERT, UPDATE, DELETE ● Методы получения дата схемы (таблицы, колонки, поля и их типы) Ты их не видешь, а они есть)
  • 19. Form Типы полей формы: ● Hidden ● Text ● Date ● Checkbox ● Number ● Textarea Создание формы $form = Form::getInstance($formType) ->text('name', 'Имя', 'введите свое имя', ['Ice:Not_Empty', 'Ice:Length_Min' => 3)]) ->text('email', 'Email', 'Enter your email', 'Ice:Email'); Сабмит формы $form->submit(); Поля формы провалидируются автоматически
  • 20. Validator Варианты схемы валидации: $validateScheme = [ 'FIELD_NAME' => 'VALIDATOR_NAME' ]; $validateScheme = [ FIELD_NAME' => [ 'VALIDATOR_NAME' => 'VALIDATOR_PARAM' ] ]; $validateScheme = [ 'FIELD_NAME' => [ 'VALIDATOR_NAME' => [ 'params' => [ 'VALIDATOR_PARAM_NAME1' => 'VALIDATOR_PARAM_VALUE1', 'VALIDATOR_PARAM_NAME2 => 'VALIDATOR_PARAM_VALUE2' ], 'message => 'validate failed for {$0}' ] ] ]; Пример: If (Validator::getInstance('Ice:Email')->validate('q.w@er.ty')) { Return 'valid'; }
  • 21. Code_Generator На данный момент доступно: ● Генерация экшенов; ● Генерация моделей; ● Генерация валидаторов; ● Генерацмя шаблонов для 3-х шаблонизаторов (Php, Smarty и Twig) Этот список со временем будет только расширяться
  • 22. Консольные команды ● Консольный интерфейс работает в интерактивном режиме ● Экшены, вызванные из консоли обладают всеми теми же возможностями что и экшены, выполняемые после http- запроса. Примеры вызовов: Создание модуля: $ ./Ice/cli Ice:Module_Create Деполой модуля: $ ./MyProject/cli Ice:Module_Deploy Обновление вендоров: $ ./MyProject/cli Ice:Composer_Update
  • 23. Не далекое будущее Ice ● Миграции; ● Автокеширование экшенов; ● Уменьшение времени бустраппинга; ● Продолжение докуменирования кода (на 100%); ● Наполение хендбука, кукбука и осталього; ● Инсталятор готовых модулей; ● Добавление модулей в текущий модуль; ● Реализация Menu; ● Реализация Auth_Provider; ● Реализация Message_Provider; ● Безопасность. Роли. ACL; ● Демонстрационные модули (GuestBook, Blog, DbManager) Вот не полный перечень задуманного на это год! ;-)
  • 24. Если Вы это видете, большое человеческое Спасибо!