Фреймворк symfony что это
Symfony - это набор автономных, отделённых и связанных PHP-компонентов, которые решают общие проблемы веб-разработки.
Вместо использования этих низкоуровневых компонентов, вы можетеиспользовать готовый к использоваию комплексный веб-фреймворк Symfony, который основывается на этих компонентах… или вы можете создать ваш собственный фреймворк. Это руководство касается последнего.
Почему из множества популярных PHP-фреймворков стоит выбрать Symfony?
Было бы самонадеянно сказать, что я испробовал абсолютно все остальные PHP-фреймворки, но я действительно испытал многие из них в разные моменты: Zend, CakePHP, CodeIgniter и — совсем недавно — Laravel (главный конкурент Symfony). Это сугубо личное предпочтение, но я всегда возвращался к Symfony. Даже Laravel, который по сути вобрал в себя большинство концепций Symfony и даже позаимствовал из него несколько компонентов (они были напрямую скопированы из Symfony), не показался мне столь же ясным и, главное, надежным, как Symfony. Сегодня, когда я руковожу собственным агентством веб-разработки, состоящим из нескольких команд PHP-разработчиков, этот аспект как никогда важен.
Symfony обладает всеми возможностями, которые можно ожидать от веб-фреймворка, — отличной документацией, экосистемой полнофункциональных плагинов (более 1000 пакетов) и всем тем, что позволяет ускорить создание профессиональных веб-приложений, которые легко поддерживать. По сути это набор полностью бесплатных компонентов с открытым исходным кодом, а его библиотеки предлагают стандартные инструменты, которые можно применять во множестве различных проектов, избегая повторного решения типовых задач. Он соответствует шаблону проектирования Model — View — Controller (MVC), который позволяет разделять задачи и делает работу каждого участника более понятной при сотрудничестве в команде. Этот фреймворк появился в 2005 году как проект с открытым исходным кодом и был первым фреймворком, поддерживающим PHP 5.3. С тех пор фреймворк развивался и теперь поддерживает PHP версии 8, имеет огромное сообщество пользователей и контрибьюторов по всему миру и сегодня является наиболее популярным PHP-фреймворком во многих странах (включая, конечно, Францию, но не Таиланд, где PHP-разработчики отдают предпочтение Laravel).
В нашей компании мы использовали Symfony для разработки различных приложений в таких отраслях, как социальные сети, управление контентом, онлайн-биллинг, маркетплейсы, управление запасами, сервисы для сравнения страховых планов и т. д.
Почему вы хотите создать ваш собственный фреймворк?¶
Почему вы бы хотели создать собственный фреймворк в первую очередь? Если вы посмотрите по сторонам, все будут говорить вам, что не имеет смысла повторно изобретать колесо, и что вам лучше выбрать существующий фреймворк и забыть о создании собственного. В большинстве случае, они будут правы, но существует несколько хороших причин для того, чтобы начать создавать собственный фреймворк:
- Узнать больше о низкоуровневой архитектуре современных веб-фреймворков в общем, и о внутренних частях комплексного фреймворка в частности;
- Создать фреймворк, подогнанный под ваши нужды (только убедитесь вначале, ваши нужды очень конкретны);
- Экспериментировать, создавая фреймворки для развлечения (в подходе научиться- и-выбросить);
- Реорганизовать старое/существующее приложение, которое требует хорошей дозы современных лучших практик веб-разработки;
- Доказать миру, что вы действительно можете самостоятельно создать фреймворк (… но с небольшими усилиями).
Этот туториал мягко проведёт вас по созданию веб-фреймворка, шаг за шагом. На каждом шагу у вас будет полностью рабочий фреймворк, который вы можете использовать в этом виде, или в качестве начала для собственного. Он начнётся с простого фреймворка и больше функций будет добавлено со временем. В итоге, у васбудет полностью функциональный комплексный веб-фреймворк.
И конечно, каждый шаг будет поводом выучить больше о некоторых из компонентов Symfony.
Если у вас нет времени читать целую книгу, или если вы хотите быстро начать, вы можете также посмотреть на Silex - микро-фреймворк, основанный на Компонентах Symfony. Код достаточно изящен и использует многие аспекты Компонентов Symfony.
Многие современные веб-фреймворки рекламируют себя, как MVC-фреймворки. Этот туториал не будет говорить о MVC-схеме, так как Компоненты Symfony могут создать любой тип фреймворка. В любом случае, если вы посмотрите на семантику MVC, то эта книга о том, как создать часть Контроллера в фреймворке. Для Модели и Просмотра, всё действительно зависит от вашего вкуса и вы можете использовать любые существующие сторонние библиотеки (Doctrine, Propel или старый добрый PDO для Модели; PHP или Twig для Просмотра).
A Community
And behind Symfony, there are people. A huge and diverse community of developers all around the world.
Всем доброго! У нас запускается третий партнёрский курс — Разработчик PHP, где мы вместе с Авито подготовили программу, а теперь думаем стоит ли отдельно делать спецкурс по фреймворкам. Первым на рассмотрении оказался Symfony.
Немного истории
Symfony представляет собой один из самых популярных фреймворков для веб-разработки в мире.
Он прошел длинный путь от полностью интегрированного full-stack фреймворка с бэк-офисом в Symfony 1.x к фреймворку, который стал развитием наработок Java-сообщества, и содержавшем в себе компоненты, вдохновленные JEE в версии Symfony2.
Изначально Symfony2 требовал PHP 5.2.7, но PHP 5.3, только вышедший на тот момент, обладал новой объектно-ориентированной моделью, поэтому SensioLabs незамедлительно сделали эту версию обязательной. Уже после в Symfony использовали Composer, завершили документацию и полностью перевели её на английский.
Практически сразу началась миграция крупных open-source проектов на Symfony: OroCRM, EzPublish, Drupal8, PHPBB, PrestaShop, Piwik и многие другие — часть полностью перешла на этот каркас, а некоторые использовали только отдельные программные компоненты. Стоит особо отметить Drupal8 — возможно, это не был самый первый проект, но точно одна из крупнейших CMS на рынке.
Возможность использовать лишь отдельные программные компоненты Symfony позволила обогатить экосистему специализированными программными решениями. Это сместило в тень фреймворк Standard Edition, (так называемое “полное издание” или “мета-пакет”), который уже не мог быть ответом на насущные вопросы бизнеса. Поэтому в 2017 году создатель Symfony объявил, что версия 3.4 для него станет последней.
Неполный список самых известных проектов, использующих Symfony:
- Фреймворк Sylius eCommerce;
- Сервис социальных закладок Delicious;
- API Platform — специализированный фреймворк для дизайна RESTful API;
- Laravel — доступный, RAD-ориентированный фреймворк;
- Платформа Oro и связанная с ней экосистема: Oro CRM, Akeneo, OroCommerce и Marello;
Плагин Flex для Composer — это будущая замена Standard Edition. Он позволит сделать разработку Symfony приложений намного легче.
У разработчика появится возможность самому выбирать и добавлять нужные ему зависимости, используя файлы формата YAML. Они объяснят Flex что нужно сделать: добавить зависимость, конфигурировать и зарегистрировать бандл или, например, создать папку.
Найти “рецепты” для Flex можно в официально утвержденном каталоге SensioLabs. Кроме него также существует общественный источник, где каждый может добавить свой рецепт и сделать его доступным для всех.
Для того, чтобы выпустить RESTful API в 2017 году, используя Flex, нужно обратиться к API Platform. Он доступен через Flex, поэтому для получения полностью рабочего приложения достаточно выполнить всего одну команду.
Многие считают, что основной фокус проекта Symfony не на самом фреймворке, а на поддержании высококачественных программных систем и их подробной документации и я не могу с ними не согласится. Думаю, на этот вывод повлиял относительный успех Symfony 3 и популярность таких программных решений, как Akeneo. По-моему, команда Symfony движется в правильном направлении :)
Плагин для Composer совместим с Symfony 3.3 и совсем не зависит от выхода Symfony 4, поэтому уже сейчас можно начинать пробовать и эксперементировать.
Symfony в 2017
Если вы хотите быстро разобраться с API Platform, Akeneo, Marello, Sylius, Drupal8, Laravel или фреймворком Symfony Standard Edition, то изучение экосистемы Symfony может вам очень помочь. Стоит обратить внимание на следующие моменты:
Компоненты Symfony отлично задокументированы, поддерживаются огромным сообществом и постоянно развиваются — за это их очень любим.
Использование конкретных компонентов и их изучение безусловно зависит от проекта. Но эти библиотеки, на мой взгляд, являются самыми полезными:
- Компонент Console: предоставляет полноценную консоль с аргументами и управлением параметрами, крайне необходимыми PHP в режиме CLI;
- Компоненты Debug и VarDumper: предоставляют улучшенный контроль стека в случае ошибки и функцию дампа в качестве замены var_dump;
- Компоненты Finder и Filesystem: предоставляют удобный API для поиска и манипуляций с папками и файлами;
- Компоненты Polyfill-*: позволяют приложению использовать функции, недоступные из-за версии PHP или из-за отсутствия нужных расширений PHP;
Вот такой краткий обзор, который, в целом, заставляет поглядывать именно в эту сторону, как первый спецкурс к отдельному курсу.
Как всегда интересны ваши мнения или тут в комментариях, или на нашем Дне открытых дверей.
В компании Outsourcify мы работаем над проектами разного размера: от небольших сайтов, состоящих из нескольких страниц, до сложных бизнес-приложений. В зависимости от конкретного случая мы рекомендуем клиентам разные технические решения (например, мы пишем много одностраничных приложений на JavaScript и работаем с WordPress), но в самых сложных сценариях, когда разрабатываются крупные веб-приложения, занимающие группу разработчиков на несколько недель или месяцев, мы отдаем предпочтение фреймворку Symfony.
Окружения (environments)
Останавливаться на окружениях особенно не хочется. Это очень удобный, но в то же время очень простой механизм, обеспечивающий возможность заходить в одно и то же приложение с различными серверными настройками. Если сказать проще — представьте себе, что у вас есть приложения и галочка, которая переключает режим его работы в debug-mode и обратно. В debug-mode, например, все события логгируются, все ошибки выводятся на экран и т.д. Если же debug-mode выключен — все логи выключены, и на экране никогда никаких ошибок появляться не будет. Так вот — в Symfony вместо флага debug/ имеется просто несколько различных окружений, каждое из которых можно настроить ПОЛНОСТЬЮ, т. е. не система решает — что включить, а что выключить, а вы сами. Хочется также отметить, что особо копаться в настройках вам не прийдется — по умолчанию для каждого приложения создается 3 environment’а: production, development, testing (используется исключительно при тестировании).
В общем, тут придраться не к чему — всё, на мой взгляд, просто идеально.
Проект
Насколько я понял, в общем случае предполагается, что проект у вас будет один на весь сайт, и он будет представлять собой некое хранилище приложений, конфигурационных файлов и моделей, которыми будут пользоваться все приложения этого проекта.
Модули (modules)
… содержат в себе контроллер с действиями и представления (т.е. MV из MVC), а также конфигурационные файлы и, возможно, библиотеки, нужные только в этом конкретном модуле. Тут всё достаточно просто и понятно.
Модули (как и приложения с проектом) можно создавать автоматически (и помощью командной строки). Кроме создания простого модуля можно создать (опять же — автоматически) CRUD (Scaffolding) для одной из таблиц, либо админку (опять же, для одной из таблиц). Админка отличается тем, что никакого кода писать практически не нужно — почти всё в ней (фильтрация, сортировка и т.д.) настраивается с помощью конфигурационного файла, что ОЧЕНЬ удобно (привет джангистам, они поймут). CRUD же очень полезен при начальных стадиях разработки. Пример — добавили вы таблицу пользователей, теперь вам нужно: выводить список пользователей, позволять им редактировать свой профиль и регистрироваться. Вместо того, чтобы всё писать с самого начала — создаем CRUD-модуль для таблицы пользователей, а потом уже можно начинать писать свой код, основываясь на уже сгенерированном. В неявный плюс такого решения можно отнести то, что коды модулей получаются похожими друг на друга и путаницы возникает меньше.
Последнее, на чем хотелось бы остановиться — это…
До того, как вы начнёте¶
Читать о том, как создать фреймворк - недостаточно. Вам нужно будет следовать и действительно печатать все включённые в этот туториал примеры. Для этого, вам понадобится современная версия PHP (5.5.9 или позже подойдёт), веб-сервер (как Apache, NGinx или встроенный веб-сервер PHP), хорошее знание PHP и понимание Объектоориентированного программирования.
Готовы? Продолжайте читать!
Модели (models)
Все модели хранятся в одном (или нескольких) YAML-файлах. К написанию моделей привыкаешь за дня. Из YAML модель с помощью одной комманды преобразуется в автоматически сгенерированные базовые классы ORM (Propel или Doctrine). Всё быстро, просто и аккуратно.
Пожалуй, это всё, что может понадобиться новичку при изучении Symfony (чтобы она не казалась ему сложной и непонятной системой, какой она мне показалась год назад).
А вот теперь перейдем непосредственно к моим рекомендациям. Но перед этим я расскажу вам про…
Управление зависимостями¶
Чтобы установить Компоненты Symfony, которые вам нужны для вашего фреймворка, вы будете использовать Composer, менеджер зависимостей проекта для PHP. Если у вас его ещё нет, скачайте и установите Composer сейчас.
История моего знакомства с Symfony
Если говорить откровенно, то я выбрал Symfony прежде всего по личным причинам. Будучи французом, я познакомился с первой версией Symfony еще более 10 лет назад и с тех пор непрерывно использую этот фреймворк, развиваясь вместе с ним. Изначально Symfony был разработан французом Фабьеном Потенсье (Fabien Potencier), а затем поддерживался принадлежащим ему агентством веб-разработки, SensioLabs. Я даже не помню, как именно я узнал о существовании этого фреймворка, но наверняка этому поспособствовало то, что я регулярно посещал франкоязычные веб-сайты. Наличие документации и учебных пособий на французском тоже помогло.
В те годы (2002–2003) я работал ИТ-консультантом и разработчиком в Париже, сотрудничая с крупными корпорациями (EDF, GDF, Alstom). Стандартом для разработки больших бизнес-приложений тогда был язык Java. Я работал над поддержкой и развитием кода существующих приложений, созданных в основном с помощью Spring, Struts и Hibernate.
В свободное время я иногда разрабатывал личные веб-сайты на PHP (например, онлайн-журнал Eklektik Rock, который я несколько раз переделывал). Уже тогда мне этот язык казался удобнее при разработке в простой локальной среде. Я пробовал разные доступные на тот момент фреймворки. Первым из освоенных мной стал Mojavi, я даже смог задействовать его в одном небольшом проекте для клиента.
Когда я решил оставить свою работу в Париже и переехать в Таиланд, я уже открыл для себя первую версию Symfony, которая была выпущена в 2005 году. Перейти от Java-библиотек, которые я использовал на работе, к фреймворку типа MVC, каким являлся Symfony, было довольно просто. Современные PHP-фреймворки очень похожи на Spring MVC, а Propel (библиотека ORM, предлагавшаяся в те времена вместе с Symfony; с тех пор заменена на Doctrine) имела сходства с Hibernate.
Когда я стал фрилансером, мне стало очевидно, что я не буду продолжать программировать на Java: не то чтобы это было невозможно, но простота использования Symfony, возможность его установки на недорогие PHP-серверы, а также тот факт, что у Symfony был открытый исходный код, были явными аргументами в его пользу. Я больше не работал в команде — я работал удаленно на удаленных клиентов. И думаю, что сделал правильный выбор, остановившись на Symfony, — не только в тех проектах, над которыми работал в то время (я начал с приложения для бронирования отелей), но и в долгосрочной перспективе, так как Symfony с тех пор существенно эволюционировал и сегодня, на мой взгляд, является одним из лучших PHP-фреймворков. Не исключаю, что сейчас на нем ведут разработку и в некоторых из тех крупных французских компаний, где я работал 10 лет назад.
Приложения
В отличии от Django — здесь приложение не является атомарной единицей системы, которую можно использовать в других проектах… В Symfony они созданы лишь для того, чтобы логически (ну, и физически) разграничить функциональность вашего проекта. И самое главное — приложения имеют место быть только в рамках одного проекта. Т.е. если вы в рамках проекта удалите одно приложение — другие от этого не пострадают, но вот перенести из одного проекта в другой приложение будет очень проблематично, т. к. оно зависит от настроек проекта, от модели проекта и так далее.
Будет нелишним сказать, что официально рекомендовано (читать как «предлагается») в проекте создавать два приложения: frontend и backend (для русскоязычной аудитории термин «админка» в данном случае будет более уместен). Сам могу порекомендовать создавать приложения только для объединения модулей, которые ставят перед собой одну цель. Например, та же админка, пользовательский интерфейс (то есть, например, профиль пользователя, всё, что пользователь может изменять на сайте) и frontend (всё, что доступно всем).
Сам я пользуюсь рекомендацией книги и имею два приложения в своем проекте.
Плюсы и минусы такого подхода мне рассматривать не хочется. Скажу лишь, что для меня Django’вский подход гораздо более удобен и логичен, и вот эти проекты/приложения для новичка выглядят достаточно сложно и непонятно, в большинстве случаев новички просто слушаются рекомендаций книги, не совсем понимая, что это и зачем это нужно. Я бы на месте разработчиков Symfony подумал бы о пересмотре этого подхода, особенно, если учитывать, что плагины в Symfony — это по сути те же Django apps, но об этом несколько позже.
A Philosophy
What could be more useful than an application developed by users for their own needs? This is the story of the genesis of Symfony – born from the imagination of the web designers at SensioLabs, a web developer in its own right. Symfony was made available to everyone under an Open Source license. This benefits other developers, who also have the ability to improve it by adding their own modules. All this was done in an environment of Best Practices, standardization and interoperability of applications.
Главные причины выбора Symfony
Гибкая архитектура. Symfony — это хорошо организованный фреймворк, который прост в освоении и использовании. Его архитектура позволяет разработчикам создавать легко поддерживаемые веб-приложения самым простым способом. Symfony включает в себя все, что ожидается от современного фреймворка, и имеет четкую структуру, облегчающую навигацию как в своем коде, так и в коде других разработчиков. Фреймворк полагается на многократно используемые компоненты и подразумевает следование множеству проверенных приемов работы. Кроме того, у него превосходная производительность (хотя и не всегда идеальная).
Инновации. Авторам фреймворка Symfony и сообществу его пользователей свойственно любопытство, которое выходит далеко за рамки мира PHP. Создатели фреймворка внесли вклад в развитие PHP в целом, причем некоторые компоненты Symfony теперь используются в других фреймворках, CMS и известных библиотеках. Многие концепции фреймворка заимствованы из Java (например, внедрение зависимостей), однако Symfony поспособствовал их адаптации к среде PHP. Панель инструментов отладки и панель профилировщика — примеры инструментов, которые помогают программистам продуктивно вести разработку, и без них теперь трудно представить написание кода на PHP.
Совместимость. Symfony позволяет создавать приложения, отвечающие потребностям любого бизнеса, при условии что эти приложения должны работать на веб-платформе. В этом фреймворке учитываются существующие стандарты PHP: PHPUnit, соглашения об именовании классов и т. д. Кроме того, Symfony позволяет использовать некоторые из своих компонентов, не используя при этом весь фреймворк, например систему управления интернационализацией, систему внедрения зависимостей, систему маршрутизации, систему управления формами и многие другие компоненты. Также авторы фреймворка выгодно использовали внешние библиотеки, такие как Doctrine и Swiftmailer, вместо того чтобы заново изобретать то, что уже хорошо работает в других проектах.
Экосистема. Так как фреймворк написан на PHP, для него существует огромное количество полезных сторонних плагинов, называемых в Symfony пакетами (или bundles). Практически всегда можно найти пакет, который поможет в решении той или иной задачи. Фреймворк Symfony также набирает популярность и признание благодаря тому, что его легко установить на любой сервер c Linux (и даже c Windows) и добиться стабильной производительности. Он поддерживает любые базы данных, включая MySQL, PostgreSQL, SQLite и MongoDB. Он поддерживает даже автоматическую валидацию форм и ввода данных пользователем, чтобы избежать SQL-инъекций и XSS-атак.
Репутация. С момента запуска проекта в 2005 году Symfony был быстро принят на вооружение PHP-разработчиками во всем мире. Сегодня он предлагает стабильную среду, которая является популярной и признанной на международном уровне. Количество ссылок на проект значительно возросло с момента его запуска; можно даже сказать, что Symfony внес вклад в «демократизацию» PHP и его распространение в крупных компаниях, хотя в профессиональной среде этот язык еще не так давно ассоциировался с низкой надежностью (и до сих пор ассоциируется, как скажут некоторые, но я не соглашусь). Symfony — это еще и активное сообщество разработчиков и контрибьюторов, которые участвуют в постоянном совершенствовании фреймворка и связанных с ним инструментов.
Стоимость. Будучи ПО с полностью открытым исходным кодом, Symfony автоматически предполагает низкую стоимость использования. Symfony позволяет разрабатывать надежные приложения для любых видов бизнеса в соответствии с потребностями заказчика, предоставляя разработчикам все возможности для управления конфигурацией и индивидуальной настройки этих приложений. Фреймворк содержит набор инструментов, помогающих программистам тестировать и отлаживать приложения, а также документировать процесс разработки в соответствии с корпоративными стандартами. Единственные подразумеваемые затраты — это труд разработчиков и хостинг.
Перевод подготовлен в преддверии старта занятий на курсе "Symfony Framework".
Чем больше я работаю над своим первым проектом на работе, тем больше мне хочется в нем поменять и тем больше я жалею о том, что перед началом работы я не прочитал до конца «The Definitive Guide to Symfony» и не изучил плагины для Symfony. Многие из них мне бы помогли намного сократить время разработки и, что самое главное, не думать о том, как красиво реализовать те или иные вещи… И еще одно — если у вас уже есть кусок системы (как это было у меня), который вы собираетесь переписывать с использованием вашего фреймворка (или просто переписывать, потому что код вам не нравиться) — то мой вам совет — потратьте время на то, чтобы спроектировать этот кусок на план вашей новой системы, не бросайтесь сразу всё переписывать (каюсь, я поступил именно так), так как после анализа (который, возможно, займет у вас не один день, и даже не одну неделю), возможно, от предыдущей архитектуры системы не останется и следа.
Вообще, я люблю проектировать, продумывать, анализировать те или иные решения, которые хочу внедрить в систему (хотя, признаюсь, опыта у меня в этом маловато), но как обьяснить заказчику, что ты провел день в раздумьях… Эх…
Ну ладно, это я отвлекся. Сегодня хочется рассказать о том, с чего стоит начать при разработке системы с помощью Symfony и каких правил следует придерживаться.
Собственно, всё начинается с создания проекта (project) и приложений (applications) в нем. Как это делается — можно почитать в книжке (ссылка приведена выше), а мне бы хотелось остановиться на обьяснении того, что такое проект и принципах выбора приложений в нем — какие им дать имена, как их структурировать и т.д.
Наш проект¶
Вместо создания вашего собственного фреймворка с нуля, мы будем писать одно и то же “приложение” раз за разом, добавляя по одной абстракции за раз. Давайте начнём с наипростейшего веб-приложения, которое можно представить в PHP:
В других случаях, вы всегда можете использовать собственный сервис (Apache, Nginx, и т.д.).
Эта документация является переводом официальной документации Symfony и предоставляется по свободной лицензии CC BY-SA 3.0.
In order to better understand what a framework is, let’s leave the world of computer science for a moment and imagine a mountaineering adventure. Developing an application is very similar to climbing a rock wall: you are at the bottom (you have an application to be created) and you need to reach the summit (and be pleased with the achievement of designing an application that works perfectly.)
If no one has ever climbed the wall in question, you will have to get by on your own: testing routes, occasionally backtracking so that you don’t get stuck in a corner, driving in pitons, etc. In contrast, if the wall has already been conquered, those who have gone before you will already have done this trial and error work, opening up possible paths (the frame) and installing the tools that will facilitate the climb (your work).
Basically, a framework consists of:
- A toolbox - a set of prefabricated, rapidly integratable software components. This means that you will have to write less code, with less risk of error. This also means greater productivity and the ability to devote more time to doing those things which provide greater added value, such as managing guiding principles, side effects, etc.
- A methodology – an “assembly diagram” for applications. A structured approach may seem constraining at first. But in reality it allows developers to work both efficiently and effectively on the most complex aspects of a task, and the use of Best Practices guarantees the stability, maintainability and upgradeability of the applications you develop.
And although it might be obvious, we thought it best to say it anyway – Symfony is a PHP framework, which means that it permits web applications to be built in PHP!
Начальная загрузка¶
До того, как вы даже сможете подумать о создании первого фреймворка, вам нужно подумать о некоторых соглашениях: где вы будете хранить код, как вы будете называть классы, как вы будете ссылаться на внешние зависимости и др.
Чтобы хранить ваш новый фреймворк, создайте каталог где-то в вашем компьютере:
Читайте также: