Zend Framework

редактировать
Zend Framework
ZendFramework-Logo.png
Разработчик (и) Zend Technologies
Первый выпуск3 марта, 2006; 14 лет назад (2006-03-03)
Стабильный выпуск 3.0.0 / 28 июня 2016 г.; 4 года назад (28.06.2016)
Репозиторий Zend Repository
Написано наPHP 7
Операционная система Кросс-платформенная
Лицензия Новая лицензия BSD
Веб-сайтframework.zend.com, getlaminas.org

Zend Framework (ZF) - это открытый исходный код, объектно-ориентированный фреймворк веб-приложений, реализованный в PHP 7 и лицензированный по Новой лицензии BSD. Фреймворк в основном представляет собой набор профессиональных пакетов на основе PHP. Платформа использует различные пакеты, используя Composer как часть своих менеджеров зависимостей пакетов; некоторые из них: PHPUnit для тестирования всех пакетов, Travis CI для непрерывных служб интеграции. Zend Framework предоставляет пользователям поддержку Model View Controller (MVC) в сочетании с решением Front Controller. Реализация MVC в Zend Framework имеет пять основных областей. Маршрутизатор и диспетчер функции решают, какой контроллер запускать на основе данных из URL, а функции контроллера в сочетании с моделью и представлением для разработки и создания конечной веб-страницы.

17 апреля 2019 года было объявлено, что фреймворк переходит в проект с открытым исходным кодом, поддерживаемый Linux Foundation и известный как Laminas.

Содержание
  • 1 Лицензия
  • 2 Компоненты Zend Framework и управление версиями
  • 3 Установка
  • 4 Анатомия Zend Framework
    • 4.1 Рекомендуемая структура каталогов приложений MVC
  • 5 Создание структуры проекта
    • 5.1 Контроллеры
    • 5.2 Действия
    • 5.3 Стандартный маршрутизатор
    • 5.4 Служебные методы
    • 5.5 Просмотр каталогов
  • 6 Спонсор и партнеры
  • 7 Возможности
  • 8 Разработка приложений
  • 9 Код, документация и стандарты тестирования
  • 10 Простой облачный API
  • 11 Hello World: файл за файлом
  • 12 Текущая разработка
  • 13 См. также
  • 14 Ссылки
  • 15 Внешние ссылки
Лицензия

Zend Framework лицензируется в рамках Open Source Initiative (OSI) -approved New BSD License. Для ZFv1 все разработчики кода должны подписать Лицензионное соглашение участника (CLA), основанное на Apache Software Foundation 's CLA. По словам Энди Гутманса из Zend, политика лицензирования и участия была создана для предотвращения проблем с интеллектуальной собственностью для коммерческих пользователей ZF. ZF2 и более поздние версии не содержат CLA. Также для структуры доступна долгосрочная поддержка (долгосрочная поддержка или LTS) на общую продолжительность 3 года.

Компоненты Zend Framework и управление версиями

Начиная с Zend Framework версии 2.5, компоненты разделяются на пакеты с независимыми версиями, а zendframework / zendframework конвертируется в мета-пакет Composer. Компоненты каркаса, представленные после разделения, не добавляются в метапакет.

Хотя версия выпуска метапакета zendframework / zendframework остается на уровне 3.0.0, он проинструктирует Composer установить последние совместимые версии компонентов платформы в соответствии с семантическим управлением версиями. Таким образом, компонент zend-mvc будет установлен в его текущей версии 3.1.1, zend-servicemanager в версии 3.3.0 и zend-form в версии 2.10.2.

Zend Framework включает в себя следующие компоненты:

АутентификацияАутентификация пользователей с помощью различных адаптеров и предоставление аутентифицированной идентичности вашему приложению.
Штрих-кодСоздавайте и отображайте штрих-коды как изображения или в PDF-файлах программно.
КэшРеализация кэширования с различными вариантами хранения, а также кодифицированные стратегии кэширования для обратных вызовов, классов и вывода.
CaptchaСоздавайте и проверяйте CAPTCHA, используя Figlets, изображения, ReCaptcha и многое другое.
КодРасширения PHP Reflection API, статическое сканирование кода и генерация кода.
Component InstallerПлагин Composer для встраивания модулей и поставщиков конфигурации в конфигурацию приложения.
ConfigЧтение и запись файлов конфигурации.
Агрегатор конфигурацииАгрегирование и объединение конфигурации из различных источников.
КонсольСоздавайте консольные приложения, используя синтаксис getopt или маршрутизацию, в комплекте с подсказками
CryptИнструменты надежной криптографии и хеширование паролей.
DBУровень абстракции базы данных, абстракция SQL, абстракция набора результатов и реализации RowDataGateway и TableDataGateway.
ОтладкаБезопасно выгружайте отладочную информацию в HTML.
DIАвтоматическое внедрение зависимостей и диспетчер экземпляров.
DiactorosРеализации сообщений HTTP PSR-7.
DOMЗапрашивать документы HTML и XML с помощью селекторов XPath или CSS.
EscaperНадежно и безопасно избегайте HTML, атрибутов HTML, JavaScript, CSS и URL-адресов.
EventManagerРеализуйте события, сигнальные слоты, аспекты и наблюдателей!
Выразительноепромежуточное ПО PSR-7 за считанные минуты.
FeedПотребляйте и генерируйте каналы Atom и RSS, а также взаимодействуйте с Pubsubhubbub.
ФайлНайдите файлы классов PHP.
ФильтрПрограммная фильтрация и нормализация данных и файлов.
ФормаПроверка и отображение простых и сложных форм, преобразование форм в бизнес-объекты и наоборот.
HAL для PSR-7Язык гипертекстовых приложений (HAL) для PSR-7.
HTTPHTTP-сообщения и абстракции заголовков, а также реализация HTTP-клиента. (Не реализация PSR-7.)
HydratorСериализовать объекты в массивы и наоборот.
InputFilterНормализация и проверка входных наборов из Интернета, API, интерфейса командной строки и т. Д., Включая файлы.
ИнтернационализацияПредоставляйте переводы для вашего приложения, а также фильтруйте и проверяйте интернационализированные значения.
JSONДе / сериализация JSON в PHP, включая выражения JavaScript.
JSON-RPC ServerРеализация JSON-RPC для PHP.
LDAPВыполнение операций LDAP, включая привязку, поиск и изменение записей в каталоге LDAP.
ЗагрузчикСтратегии автозагрузки и загрузки плагинов.
ЖурналНадежный составной логгер с фильтрацией, форматированием и поддержкой PSR-3.
ПочтаАнализируйте, создавайте, храните и отправляйте сообщения электронной почты, используя различные протоколы хранения и транспорта.
МатематикаСоздавайте криптографически безопасные псевдослучайные числа и управляйте большими целыми числами.
ПамятьУправляйте данными в среде с ограниченным объемом памяти.
MIMEСоздавать и анализировать сообщения и части MIME.
Менеджер модулейМодульная система приложений для приложений zend-mvc.
MVCУровень MVC Zend Framework, управляемый событиями, включая приложения, контроллеры и плагины MVC.
Интеграция MVC-ConsoleИнтеграция между zend-mvc и zend-console.
Интеграция MVC-i18nИнтеграция между zend-mvc и zend-i18n.
плагин fileprg ()Плагин Post / Redirect / Get с обработкой загрузки файлов для контроллеров zend-mvc.
плагин flashmessenger ()Плагин для создания и отображения флэш-сообщений через контроллеры zend-mvc.
Подключаемый модуль identity ()Подключаемый модуль для получения текущего аутентифицированного идентификатора в контроллерах zend-mvc.
prg () плагинплагин Post / Redirect / Get для контроллеров zend-mvc.
НавигацияУправляйте деревьями указателей на веб-страницы для построения систем навигации.
PaginatorПагинация коллекций данных из произвольных источников.
ACLСоздание, управление и запрос списков контроля доступа.
RBACПредоставление и запрос средств управления доступом на основе ролей для вашего приложения.
Сведения о проблемеПодробные сведения о проблеме PSR-7 для ответов HTTP API и промежуточного программного обеспечения.
ProgressBarСоздавать и обновлять индикаторы выполнения в различных средах.
Мост PSR-7PSR-7 <->преобразования сообщений zend-http.
МаршрутизаторГибкая система маршрутизации для HTTP и консольных приложений.
СериализаторСериализируйте и десериализуйте структуры PHP для различных представлений.
СерверСоздание RPC-серверов на основе отражения.
ServiceManagerЗаводской контейнер для внедрения зависимостей
Интеграция ServiceManager-Diинтеграция zend-di для zend-servicemanager
СессияОбъектно-ориентированная интерфейс к сессиям и хранилищу PHP.
SOAPСоздание, обслуживание и доступ к приложениям SOAP, а также анализ и создание WSDL.
StdlibРасширения SPL, утилиты для работы с массивами, обработчики ошибок и многое другое.
StratigilityОснова промежуточного программного обеспечения PSR-7 для построения и распределения конвейеров промежуточного программного обеспечения.
ТегУправляйте тегами и весовыми элементами, а также создавайте облака тегов.
TestИнструменты для облегчения модульного тестирования приложений zend-mvc.
ТекстСоздавайте FIGlets и текстовые таблицы.
URIОбъектно-ориентированный интерфейс для URI с возможностями проверки.
ВалидаторКлассы валидации для широкого диапазона доменов и возможность связывать валидаторы в цепочку для создания сложных критериев валидации.
ПросмотрГибкий уровень просмотра, поддерживающий и предоставляющий несколько слоев просмотра, помощников и т. Д.
XML-RPCПолнофункциональные реализации сервера и клиента XML-RPC.
XML2JSONКонвертировать XML-документы в JSON.
Установка

Официально поддерживаемый метод установки - через менеджер пакетов Composer.

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

Например, если вам нужен пакет MVC, вы можете установить его с помощью следующей команды:

$ composer require zendframework / zend-mvc

Полный список компонентов доступен в документации Zend Framework.

Анатомия Zend Framework

Zend Framework следует подходу, основанному на принципе предпочтения конфигурации, и не требует какой-либо конкретной структуры приложения. Доступны скелетные приложения для zend-mvc и zend-expressive, которые предоставляют все необходимое для запуска приложений и служат хорошей отправной точкой.

Рекомендуемая структура каталогов приложения MVC

ZendSkeletonApplication, приложение-скелет, использующее системы уровней и модулей Zend Framework MVC, можно установить с помощью:

$ composer create-project zendframework / skeleton-application 

Будет создана файловая структура, подобная этой:

/ ├── config / │ ├── autoload / │ │ ├── global.php │ │ └── local.php.dist │ ├── application.config.php │ └── modules.config.php ├── data / │ └── cache / ├── module / ├── public / │ └── index.php ├── vendor / ├── composer.json ├── composer.lock └── phpunit.xml.dist

В каталоге config / есть конфигурации для всего приложения. Каталог module / содержит локальные модули, которые фиксируются вместе с application. vendor / содержит код поставщика и другие модули, управляемые независимо от приложения, содержимое папки обычно управляется Composer.

Zend Framework модуль имеет только одно требование: класс модуля существует в пространстве имен модуля и может быть загружен автоматически. Класс модуля предоставляет приложению логику настройки и инициализации. Рекомендуемая структура модуля выглядит следующим образом:

├── config / │ └── module.config.php ├── src / │ └── Module.php ├── test / ├── view / ├── composer.json └── phpunit.xml.dist

Каталог config / содержит конфигурации модулей, каталог src / содержит исходный код модуля, как определено в PSR-4 стандарт автозагрузки, каталог test / содержит модульные тесты для модуля, а каталог view / содержит сценарии просмотра.

Создание структуры проекта

Zend framework поддерживает ввод командной строки для создания структуры каталогов. Мы будем использовать командную строку interface, чтобы начать создание структуры каталогов для нашего проекта. Это даст вам полное представление о структуре каталогов. Интерфейс поддерживает и предоставляет интерфейс Zend_Tool, предоставляющий целый ряд командных функций.

  1. Откройте интерфейс командной строки и измените каталог hellozend.
  2. Пользователи Windows введите: bin \ zf \ bat create project
  3. Пользователи Linux / Mac введите: bin \ zf.sh create проект

Эта процедура создаст проект Zend Framework в указанном вами месте. После запуска Zend_Toll будет создан базовый скелет приложения. Это создаст не только структуру каталогов, но и все базовые элементы структуры MVC. Чтобы получить функции Apache, настройки виртуального хоста будут такими:

Listen 8080 DocumentRoot / User / keithpope / Sites / hellozend / public

Созданная базовая структура каталогов будет несколько как упоминалось в вышеупомянутой структуре каталогов Zend Framework с аналогичным объяснением. Еще один аспект Zend-Tool, который автоматически инициализируется во время установки, - это загрузка. Здесь основная цель - инициализировать запрос страницы разработчиком. Основная запись здесь, созданная Zend Framework, - это файл индекса. Индексный файл предоставляет функцию для обработки запроса пользователя. Это основная точка входа для всех запросов. Ниже показаны функциональные возможности.

  1. Application-path: определяет путь к каталогу приложения
  2. Application_Env: изменяет поведение приложения в зависимости от различных факторов, таких как использование приложения.
  3. getenv (): проверяет системную среду.
  4. Инициализировать приложение Zend-Application: включает Zend-Application и создает его экземпляр.
  5. Вызвать метод bootstrap () вместе с методом run (), начиная с MVC.

Обычно Zend-Tool создает много важных структур каталогов. Эта система построена на основе технологии Rapid Application Development. В качестве общего правила поддержки, фреймворк фокусируется на кодировании и структурах проекта, а не на более мелких частях.

  • Структура каталогов проекта
  • Контроллеры
  • Действия
  • Представления
  • Файл начальной загрузки

Контроллеры

Контроллер - это основная запись в приложении Zend Framework. Обработчик фронт-контроллера является основным центром приема запросов и выполнения точных действий в соответствии с запросами команд. Весь процесс запроса и реагирования - это маршрутизация и диспетчеризация (что в основном означает вызов правильных методов в классе), которые определяют функциональность кода. Это реализуется через интерфейс Zend_Controller_Router_-. Функциональность маршрутизатора заключается в том, чтобы определить, какие действия необходимо выполнить, а диспетчер наоборот выполняет эти запрошенные действия. Контроллер в Zend Framework связан с разнообразным массивом структурных каталогов, что обеспечивает поддержку эффективной маршрутизации. Основной точкой входа и командным контроллером является Zend_Controller_Front, он работает как основа, которая делегирует полученную и отправленную работу. Запрос формируется и инкапсулируется с экземпляром Zend Controller Request HTTP в качестве поставщика доступа к запросам HTTP. HTTP содержит все суперглобальные переменные фреймворка ($ _GET, $ _POST, $ _COOKIE, $ _SERVER и $ _ENV) с соответствующими путями. Более того, контроллер также предоставляет функции, которые позволяют собирать запрошенные переменные.

Действия

Действия - важные функции. Контроллеры не работают без действий. Для этой цели мы создаем другой метод, к имени которого добавлено действие, и фронт-контроллер автоматически распознает его как действие. Действие имеет метод init (), который показывает его частный характер и недоступен никому. Следующие команды выполняются, чтобы Zend_Tool мог создать действие за нас. Благодаря использованию стандартного диспетчера все функции называются по имени действия и к ним добавляется слово «Действие». Это приводит к классу действия контроллера, содержащему такие методы, как indexAction (), viewAction (), editAction () и deleteAction ().

Пользователи Windows:

bin \ zf.bat создают действия для индекса

Linux и Mac пользователей:

bin / zf.sh создать действие по индексу

Пример форм и действий:

пространство имен Album \ Form; используйте Zend \ Form \ Form; class AlbumForm extends Form {public function __construct ($ name = null) {// мы хотим игнорировать переданное имя parent :: __ construct ('album'); $ this->add (array ('name' =>'id', 'type' =>'Скрытый',)); $ this->add (array ('name' =>'title', 'type' =>'Text', 'options' =>array ('label' =>'Title',),)); $ this->add (array ('name' =>'artist', 'type' =>'Text', 'options' =>array ('label' =>'Artist',),)); $ this->add (array ('name' =>'submit', 'type' =>'Submit', 'attributes' =>array ('value' =>'Go', 'id' =>'submitbutton').,),)); } // источник: Zend Framework Guide}

Стандартный маршрутизатор

Стандартный маршрутизатор - важный инструмент Front Controller. Здесь принимаются основные решения в том, какой модуль, контроллер и действие запрашиваются. Все они здесь обрабатываются. Ниже приводится структура по умолчанию.

  1. Модуль
  2. Контроллер
  3. Действия

Запрос следует шаблону, первая информация берется из конечной точки URL HTTP. URI - это конечная точка запроса. URL структура выглядит следующим образом: http://domain.com/moduleName/controllerName/actionName

Пример кода маршрутизатора по умолчанию:

// Предполагается следующее: $ ctrl->setControllerDirectory (array ('default' =>'/ path / to / default / controllers', 'news' =>'/ path / to / news / controllers', 'blog' =>'/ path / to / blog / controllers'));

. Только модуль:. http: // example / news. module == news.. Неверный модуль сопоставляется с именем контроллера:. http: // example / foo. controller == foo.. Module + controller:. http: // example / blog / archive. module == blog. контроллер == архив.. Модуль + контроллер + действие:. http: // example / blog / archive / list. module == blog. контроллер == архив. действие == список.. Модуль + контроллер + действие + параметры:. http: // example / blog / archive / list / sort / alpha / date / desc. модуль == блог. контроллер == архив. действие == список. sort == alpha. date == desc

служебные методы

Zend Framework также предоставляет некоторые служебные методы. Ниже приведены некоторые служебные методы, представленные в платформе.

_forward ()
он используется для вызова действия
_forward {$ action, $ controller = null, $ module = null, array $ params = null}
$ actions
строка, требуется действие
$ controller
необязательный строковый параметр и место, где находится контроллер.
$ module
строка, имеет модуль, в котором у нас есть контроллер.
$ params
массив, пользовательский параметр

Другой метод - это служебный метод перенаправления. Это противоположно вышеупомянутому методу _forward (). _redirect () выполняет HTTP при перенаправлении при создании нового запроса. Методы _redirect () принимают два аргумента, а именно $ url и $ options.

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

//application/controllers/IndexController.php public function init () {$ this ->_ helper->viewRenderer->setNoRender (); }

На этапе инициализации IndexController и ContactController вызывается viewReader и для объекта представления вызывается флаг noRender. Отсутствие этого процесса создает ошибку в нашем приложении.

Каталоги просмотра

Zend Framework предоставляет структуру представления для нашего проекта, а контроллер и действия автоматически предоставляются нашему приложению. Внутри папки Zend Framework in view мы наблюдаем следующие папки:

  1. View
  2. Helpers
  3. Scripts
  4. Contacts
  5. errors
  6. index

Для создания представления следуем:

<Hello ZendHello Zend

Hello from Zend Framework

Пример представления:

// https://framework.zend.com/ manual / 2.4 / en / modules / zend.view.quick-start.html пространство имен Foo \ Controller; используйте Zend \ Mvc \ Controller \ AbstractActionController; используйте Zend \ View \ Model \ ViewModel; класс BazBatController расширяет AbstractActionController {публичная функция doSomethingCrazyAction () {$ view = new ViewModel (array ('message' =>'Hello world',)); $ view->setTemplate ('foo / baz-bat / do-something-crazy'); return $ view; }}
Спонсор и партнеры

Zend Technologies, соучредителем которого являются PHP основные участники Энди Гутманс и Зеев Сураски, корпоративный спонсор Zend Framework. Технологические партнеры включают IBM, Google, Microsoft, Adobe Systems и StrikeIron.

Features
<186.>Возможности Zend Framework:

Разработка приложений

Приложения Zend Framework могут работать на любом стеке PHP, который выполняет технические требования. Zend Technologies предоставляет стек PHP, Zend Server (или Zend Server Community Edition), который рекламируется как оптимизированный для запуска приложений Zend Framework. Zend Server включает Zend Framework в свои установщики вместе с PHP и всеми необходимыми расширениями. Согласно Zend Technologies, Zend Server обеспечивает повышенную производительность для PHP и особенно приложений Zend Framework за счет ускорения кода операции и нескольких возможностей кэширования, а также включает средства мониторинга и диагностики приложений. Zend Studio - это IDE, которая включает функции, специально предназначенные для интеграции с Zend Framework. Он предоставляет представление MVC, генерацию кода MVC на основе Zend_Tool (компонент Zend Framework), средство форматирования кода, автозавершение кода, поддержку параметров и многое другое. Zend Studio не является бесплатным программным обеспечением, тогда как Zend Framework и Zend Server Community Edition бесплатны. Zend Server совместим с распространенными инструментами отладки, такими как Xdebug. Другие разработчики могут захотеть использовать другой стек PHP и другую IDE, такую ​​как Eclipse PDT, которая хорошо работает вместе с Zend Server. Предварительно настроенная бесплатная версия Eclipse PDT с Zend Debug доступна на веб-сайте Zend.

Стандарты кода, документации и тестирования

Код, вносимый в Zend Framework, зависит от строгого кода, документации и стандартов тестирования. Весь код должен соответствовать стандартам кодирования ZF, и модульные тесты должны достичь 80% покрытия кода, прежде чем соответствующий код может быть перемещен в ветвь выпуска.

Простой облачный API

22 сентября 2009 г. Zend Technologies объявила, что будет работать с технологическими партнерами, включая Microsoft, IBM, Rackspace, Nirvanix и GoGrid вместе с сообществом Zend Framework для разработки общего API для облачных сервисов приложений под названием Simple Cloud API. Этот проект является частью Zend Framework и будет размещен на веб-сайте Zend Framework, но был запущен отдельный сайт под названием simplecloud.org для обсуждения и загрузки самых последних версий API. Simple Cloud API и несколько облачных сервисов включены в Zend Framework. Адаптеры к популярным облачным сервисам достигли производственного качества.

Hello World: файл за файлом

Чтобы создать программу Hello World, необходимо выполнить несколько шагов, включая:

  • Сначала создайте четыре файла в структуре каталогов. Это файл начальной загрузки, файл управления Apache (.htaccess ), файл контроллера и контроллер представления для представления.
  • Во-вторых, необходимо разработать копию Zend Framework. С ростом сложности требуется дополнительный код, который обеспечит функциональность, относительно небольшой и фокусируется на преимуществах системы MVC. Что касается процесса более подробно, файл начальной загрузки - это инициализация в той или иной форме.

Затем необходимо убедиться, что среда правильная и нет ошибок, после чего следует установить дату и время для функции отслеживания. Чтобы установить дату и время, можно выполнить множество процедур; например, может быть вызван метод data_default_timezone_set (), и Zend предполагает, что каталог по умолчанию будет включать путь phd. Zend Framework не зависит от какого-либо конкретного файла, но в этом случае полезны вспомогательные классы. Ниже приведены некоторые примеры:

  • Zend_Loader :: loadClass () основная цель здесь - исправить файл для указанного имени класса.
  • После этого символы подчеркивания преобразуются в структуры, специфичные для каталога. В результате строки кода Zend_Loader :: loadClass ('Zend_Controller_Front'); и include_once 'Zend / Controller / Front.php'; показать аналогичные результаты.
  • Zend_Debug :: dump () выполняет функции с точки зрения отладочной информации и ориентирован на форматированный вывод var_dump (). Наконец, начальная загрузка запускает передний контроллер и инициализирует его. Шаблон проектирования, используемый Zend_Controller_Front, является дизайном Singleton, а getInstance () используется для получения единственного экземпляра.
Текущая разработка

Zend Framework 3.0 был выпущен 28 июня 2016 года. Он включает новые компоненты, такие как Сервер JSON RPC, преобразователь XML в JSON, функциональность PSR-7 и совместимость с PHP 7. Zend Framework 3.0 работает до 4 раз быстрее, чем Zend Framework 2, и пакеты были разделены для обеспечения большего повторного использования. Разработчики Zend Framework активно поощряют использование Zend Framework версии 3.x. Заявленный срок службы Zend Framework 1 - 28 сентября 2016 г., а для Zend Framework 2 - 31 марта 2018 г. Первый разрабатываемый выпуск Zend Framework 2.0 был выпущен 6 августа 2010 года. В этот выпуск были внесены изменения: удаление операторов require_once, переход на пространства имен PHP 5.3, отредактированный набор тестов, переписанный Zend \ Sessionи добавление нового Zend \ Stdlib. Второй выпуск для разработки состоялся 3 ноября 2010 г. Первый стабильный выпуск Zend Framework 2.0 был выпущен 5 сентября 2012 г.

См. Также
  • Портал бесплатного программного обеспечения с открытым исходным кодом
Ссылки
Внешние ссылки
Последняя правка сделана 2021-06-23 08:18:16
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте