Почему стоит выбрать yii2 фреймворк
В конце прошлого года SitePoint опубликовал статью, в которой освещались основные фреймворки PHP. Для пятого места было выбрано Yii (произносится Yee ) Framework. В то время самой последней доступной версией фреймворка была 1.1.14. Недавно появился Yii 2.0, так что вы можете начать использовать его в производстве.
Хотя мы освещали его недавно, когда он все еще находился в статусе RC, он только достиг полного статуса релиза, и мы чувствуем, что пришло время вернуться к этой теме с некоторыми причинами выбора ее среди альтернатив.
3. Высоко Расширяемый
Yii похож на костюм, который отлично смотрится со стойки, но также очень легко адаптировать под свои нужды. Практически каждый компонент фреймворка является расширяемым. Простой пример – добавление уникального идентификатора тела к вашим представлениям. (Если вам интересно знать, почему вы можете захотеть это сделать, посмотрите эту статью ).
Сначала я бы создал файл в каталоге app\components с именем View.php и добавил следующее:
Затем в моем основном файле макета ( app\views\layouts\main.php ) я добавил бы следующее к тегу body моего HTML:
И, наконец, я бы добавил следующее в мой основной файл конфигурации, чтобы Yii знал, чтобы использовать мой расширенный класс View вместо его собственного значения по умолчанию:
Вывод
Как и любой хороший фреймворк, Yii помогает быстро создавать современные веб-приложения и следить за их эффективностью. Это подталкивает вас к созданию безопасных и тестируемых сайтов, выполняя за вас большую работу. Вы можете легко использовать большинство его функций в точности так, как они предоставляются, или вы можете изменить каждую из них в соответствии со своими потребностями. Я действительно призываю вас проверить это для вашего следующего веб-проекта!
Перевод некоторых глав из книги Bill Keck. Yii 2 For Beginners.
Предисловие
Yii2 поставляется в двух вариантах, basic и advanced, и может показаться неестественно, использовать для начинающих шаблон advanced(продвинутый), но этот шаблон, по иронии судьбы, облегчает работу с приложением, если оно использует модели, которые хранятся в базе данных. Современные веб-приложения нуждаются в этой функциональности и шаблон advanced имеет в своём распоряжении для этого готовые решения.
Другое большое преимущество у шаблона advanced, это то, что приложение делится на frontend(пользовательская часть) и backend(модуль управления), который дает исчерпывающий ответ на постоянно возникающий вопрос: «куда же поместить модуль управления?»
Я бы хотел не только ввести вас в удивительный мир php фреймворка, но и так, же дать вам точку опоры, включающую все, в чем нуждается надежное веб-приложение управляемое базой данных. Хотя advanced шаблон содержит чрезвычайно полезные возможности, в нем, конечно же, отсутствуют важные части, которые мы будем пополнять с помощью этой книги.
Цель — предоставить вам модель шаблона, которую вы сможете использовать для всех ваших будущих проектов.
Возможности
С инсталляцией advanced шаблона вы получите некоторые возможности веб-приложения, включающие в себя:
- предопределённую схему таблицы пользователей
- форму входа и регистрации пользователей
- функциональность восстановления забытого пароля
- разделённые области пользователей (frontend) и администраторов(backend)
- автоматическую генерацию кода для моделей, контроллеров и представлений
- встроенную интеграцию с Twitter Bootstrap и приоритетную верстку для мобильных устройств
- надежные виджеты и помощники для представления данных
Для этого будем добавлять в приложение все, что в нем отсутствует из коробки:
- красивые усовершенствования пользовательского интерфейса подобно jquery календарю
- методы для зависимых моделей, которые облегчат отображения связанных данных
- методы для контроллеров, которые разграничивают доступ
- расширяемая структура данных, которые будут общими для всех ваших будущих приложений
- управление доступом на основе ролей (RBAC)
- ограничение содержания на основе типа пользователей, таких как «бесплатный» и «платный».
- социальный модуль, который позволит поделиться
- регистрация и вход с помощью Facebook
Эта книга идеальна для начинающих программистов, кто готов перейти на разработку с помощью фреймворка. Yii2 PHP фреймворк широко масштабируемый и расширяемый, со встроенными возможностями. Мы познакомим вас с этим удивительным фреймворком и объясним детально все, в чём вы будете нуждаться, чтобы знать, как создать и запустить. И вы полюбите Yii2!
Продвинутые PHP специалисты смогут стремительно пронестись сквозь книгу и будут в состоянии быстро создавать и запускать на феноменальном фреймворке Yii2. Что позволит не только сберечь им время на работе, но так, же использовать эффективные рычаги извлечения выгод от фреймворка с открытым кодом, имеющего цельное сообщество за собой.
Тем не менее, стиль изложения в книге рассчитан для начинающих. В книге много подробного описания, чтобы помочь людям, которые имеют небольшой опыт работы с PHP и ещё не могут реально перейти в продвинутое объектно-ориентированное программирование. Мы старались, несомненно, полностью объяснять, как работает фреймворк, как он использует ООП, чтобы создать интуитивный уровень разработки, который позволял бы программистам различного уровня достигать результата, к которому они стремятся.
В любом случае, изучение Yii2 даст вам опыт работы с ООП, с практическим результатом. Вы завершите изучение книги с работающим веб-приложением.
Что делает Yii2 фреймворк особенным?
Программисты должны сделать выбор, что будет лежать в основе программирования. Поэтому одно из самых больших решений, которое вы должны сделать как программист, а, может, скорее всего, решение вы будете делать, как часть команды программистов, использовать или нет фреймворк, и если да, то какой.
Что касается вопроса использования PHP фреймворк, есть так много преимуществ, чтобы поступить так, что это становится и ежу понятно.
Вот несколько очевидных преимуществ использования фреймворка, который:
— Использует стандартные способы решения задач, что уменьшает или устраняет запутанность кода.
— Сокращает время, затрачиваемое на рутинные задачи, такие как проверка форм и безопасность.
— Облегчает командную работу с помощью соблюдения стандартов.
— Облегчает поддержку кода с использованием общей архитектуры и методов.
— Имеет активное сообщество разработчиков, которые поддерживают фреймворк, обобщенные задачи и новые возможности.
Существует пара недостатков использования фреймворка, которые следует отметить. Во-первых, весь код, который включает в себя фреймворк, создает нагрузку на сервер и это может стать реальной проблемой. К счастью, доступны варианты кэширование, которые позволяют снизить последствия перегрузки, и для корпоративных приложений, вы можете использовать нативный SQL, чтобы минимизировать время выполнения запроса. Поэтому проблема перегрузки сервера не должна остановить вас от использования фреймворка.
Другое дело, очевидно, когда вы работаете с фреймворком, то работаете с огромным количеством кода, который не вы писали и придётся потратить время, чтобы понять, как это все работает. Некоторые части кода могут быть довольно непонятны в зависимости от вашего уровня мастерства и опыта, поэтому не следует ожидать, что вам будет сразу все понятно. Это не произойдёт мгновенно.
Конечно же, вы знаете, что существует путь обучения, благодаря которому вы сейчас читаете эту книгу. И хотя это занимает время, чтобы разобраться с чужим кодом, что может быть мучительно больно, но куда больнее, написать собственную пользовательскую систему с нуля. Учитывая все обстоятельства, использование фреймворка для корпоративной разработки является разумным выбором.
Итак, самое простое — это понять, что использование фреймворка поможет вам разрабатывать более стройный и надежный проект, но теперь самое трудное. Вы должны решить, какой фреймворк использовать.
Почему я выбрал Yii2
Я не могу сказать какой фреймворк для вас лучший, что вам интересно и вам лично решать, но я могу немного рассказать о дороге, которая привела меня к Yii2. Это не было решением руководимым необходимостью найти легкий путь изучения PHP, это точно. В моей компании еще в 2012 году, я был в команде разработчиков, которые рассматривали различные фреймворки и должен был решить, какой из них использовать. В то время я даже не мечтал, что напишу книги об одном из них.
В любом случае, мы коллективно исследовали все, что могли найти из основных PHP-фреймворков. Я лично прочитал всю документацию и мы имели долгие инженерные дискуссии о том, что мы думали, что будет работать. Вы не представляете мое разочарование, когда я прочитал всю эту документацию и отошел от этого с чувством менее осведомленным, чем я прежде начал читать все это.
Однако наша команда программистов сделала предпочтение. Они чувствовали, что Yii 1.1.14 был лучшим выбором. Это была версия фреймворка, которая была доступна в то время, мы выбрали её. Поэтому команда приняла этот фреймворк и никогда не оглядывалась назад. Они полюбили её.
Я, с другой стороны, остался разочарованным. Так как я был только начинающим программистом, и действительно изо всех сил пытался этому научиться. Я не находил этот фреймворк очень интуитивным и понятным. Особенно после сравнения его с другими платформами, где старались все интегрировать красиво, а архитектура Yii казалась мне просто уродливой.
Я так расстроился в один прекрасный момент, что начал искать другой вариант.
Другие варианты
Я хотел найти красиво написанную документацию для нового фреймворка и запустить её мимо команды. Но всегда получал одинаковый ответ. Команда была довольна фреймворком Yii.
Они мне говорили, что может быть трудно её изучать, но она легка в использовании, как только поймете, как она работает. Поэтому я посвятил себя изучению выбранного командой фреймворка. Дело продвигалось медленно и езда была ухабистая. Я не получал удовольствия. Я прорабатывал главу 10 в книге по Yii 1.1.14, полагая, что никогда по-настоящему не смогу самостоятельно создать приложение менее чем за сто лет. Слишком много дорог, казалось, уходили в никуда.
Затем произошло чудо.
Появление Yii2
Я нашел Yii2 Альфа. Мне было любопытно увидеть, какие различия были в Yii2, по сравнению с бывшей 3 года на тот момент платформой. Так что я нырнул в неё и к моему глубокому и полному удивлению, я мгновенно получил с ней контакт. Я понимал структуры. Я мог бы написать код, который фактически работал!
Какое это было великое чувство. Я лично нашел, что Yii 2 будет наиболее интуитивно понятной и элегантной из всех PHP-фреймворков, которые я изучал. У меня столько энтузиазма, что я хочу поделиться им, с каждым программистом которого знаю, и даже тех, кого я не знаю, что побудило меня написать эту книгу.
С помощью Yii2, даже будучи новичком, я смог поднять на ноги рабочий сайт, который имел управляемую базой данных модель пользователей, с пользовательской и администраторской частью. Прямо из коробки, я получил рабочую модель пользователей, с функцией восстановления забытого пароля, которая также интегрирована с начальной загрузки для мобильного, отзывчивого дизайна, без программирования вообще.
Как это здорово! Хотя я был начинающий программист, когда изучал PHP-фреймворки, я не имел опыта работы с базами данных и это одна из областей, на мой взгляд, где Yii2 действительно блещет.
До недавнего времени использовал yii2 но потом пришлось изучать и поработать с фреймворком Symfony 4. Я услышал многой разных мнений от коллег. Кто то говорит что Yii2 хороший фреймворк, кто то говорит что он плохой. Мне удобнее использовать Yii2 но слова коллег о том что проекты на yii лучше не делать и что потом эти проекты тяжело поддерживать не дают мне покоя. Хотелось узнать мнение от более опытных коллег.
Простой 4 комментария
Не очень, мы на работе используем Yii, и комьюнити все меньше и меньше, ответы на вопросы почти никто не пишет, новые фичи выпускаются - и забрасываются мгновенно, если бы перед мной стоял выбор laravel/symfony/yii2, то я бы точно не выбрал yii2
Но это лично мое мнение и опыт.
Yii2 хорош как инструмент, как и все другие, вопрос в сообществе и кол-ве готовых решений + дальнейшей поддержке на вашей работе
alex4answ,
1. На Yii положены другие задачи. Где вы ещё можете так быстро создать прототип)
2. Вы почему-то Yii2 особенно выделили, а почему не написали Symfony2. Ведь симфони 2 тоже не был таким крутым. Yii2 - разработка 2014 годов. Он просто устарел, а новых версий нет. А уж если его сравнивают в 2020 году с другими развивающимися фреймворками, то он явно чего-то стоит) В Yii3 все стало неприметного лучше. Библиотеки можно использовать свои или симфони, psr поддерживается.
3. Готовые решения пишутся не фреймворком и сообществом Yii. Готовые решения пишутся всем сообществом на Php. Все что делается на фреймворке это обертка и быстрая интеграция. Пример вам симфони пакеты. У них есть компоненты и бандлы. Компонент можно подключить хоть к Yii, хоть к Laravel. Ограничение только языком. А вот бандлы существуют конкретно для симфони. Они интегрируют какой-то код в свою структуру. Благодаря чему вам не приходится после установки бегать подключать компонент. Вы можете подключить к фреймворку любую php библиотеку. Вам только придётся писать обертку над ней. Контроллеры свои.
Максим, Да, вы правы, и спасибо вам большое за ответы и помощь, просто у меня такая тоска от работы с Yii2, и скорее это моральное устаревание и собственную усталость от годовой, рутинной работы с ним я проецирую в целом на Yii2.
Yii, вероятно, самый популярный PHP фреймворк на просторах СНГ.
Многие годы он был замечательным инструментом и помогал нам зарабатывать на хлеб с маслом.
Но стоит ли начинать на нем новые проекты в 2017-м? Я задумался.
Архитектура фреймворка
Мысленно вернемся в 2014-й.
Ожидание второй версии Yii кажется бесконечно долгим, core-разработчики не называют никаких сроков.
Разработка ведется в закрытом от публики репозитории.
И вот SamDark презентует Yii 2.0:
Выходит, архитектура закладывалась в 2014 — 3 = 2011-м году. Или раньше?
Взгляните на Component.php из Yii 2
А теперь на CComponent.php из Yii 1
А теперь на TComponent.php из PRADO Framework — дедушки нынешнего Yii. Выглядит знакомо.
Истоки самого же PRADO уходят куда-то во времена расцвета Delphi:
С первой версии нам достались глобальные константы в коде, свой autoloader, своя хитрая система алиасов для файлов и папок.
Ооооок. Просто напоминаю, что сейчас идет вторая половина 2017-го.
Приходя к Yii с других инструментов, вы должны понимать, что здесь весь ваш предыдущий опыт становится нерелевантным.
Yii — это не просто фреймворк, это попытка сделать свою надстройку над языком.
Все, абсолютно все компоненты Yii наследуются от класса Object, в котором переопределяются __get , __set , __isset и так далее.
Многие классы наследуются от Component, который наследуется от Object, и в котором еще раз переопределяются все магические методы.
Благодаря этому все классы фреймворка из коробки умеют бросать события, подписываться на них, могут содержать т. н. behaviors.
Каждая модель ActiveRecord в вашем приложении неявно наследует 5 классов и реализует 5 интерфесов.
У всех ваших моделей, так называемых "компонентов", "виджетов", контроллеров, логгеров, хелперов, валидаторов — одни и те же предки.
Компоненты, их события, поведения… возможно, они имели смысл в PRADO Framework, где "компонентами" были TButton, TAccordion и все вот это.
Среди достоинств Yii часто озвучивают простоту фреймворка. Но это правда только отчасти.
Знаете, что происходит, когда вы делаете что-то безобидное вроде $post->title = 'Hello' ?
Вы можете побывать здесь, здесь, здесь, здесь, а также в любом прикрепленном к $post event-у или behavior-у.
Это может свести с ума во время отладки.
Не добавляет радости и тот факт, что любой компонент приложения из любого места можно достать через Yii::$app. Эдакий экземпляр приложения и сервис-локатор в одном лице.
DI-контейнер
В Yii 2 он есть.
В нем нет ни compile-time проверок, ни защиты от circular references, ни тегов (как в Symfony и Laravel), ни Contextual Binding (как в Laravel).
Доступен из любой точки приложения как Yii::$container. Снова.
Внутри Yii 2 собственный контейнер не используется, а все компоненты лежат в Yii::$app, прямо как в первой версии.
Интересный факт: Qiang начал писать Yii 2 в 2011 году, а контейнер был добавлен только три года спустя, между 2.0.0-alpha и 2.0.0-beta.
Active Record
Если оставить в стороне споры Active Record vs Data Mapper, то реализация AR в Yii очень даже ничего.
Удобное и лаконичное API, поддерживаются все популярные СУБД. Есть нормальные миграции из коробки.
Единственный минус вытекает из сильной связанности фреймворка — если ваша бизнес-логика оказалась в AR-моделях, то переиспользовать все это добро можно только в рамках проектов на Yii.
Фронтенд
Тут все плохо.
В Laravel есть Elixir, в Symfony с недавних пор — Webpack encore.
Yii же не просто не помогает с фронтендом, а еще и добавляет головной боли.
Для установки Yii 2 вам нужно в принудительном порядке поставить глобально fxp/composer-asset-plugin, для того, чтобы поставить jQuery c помощью composer-а, для того, чтобы установился Yii.
jQuery входит в обязательные зависимости Yii 2.
Не припоминаю ни одного другого composer-пакета, для установки которого нужно было танцевать с бубном.
В проектах с Yii каждый запуск composer install/update происходит утомительно долго,
т.к. composer каждый раз идет гулять куда-то в глубины репозитория Bower-пакетов.
Еще мне когда-то пришлось откатывать версию composer-а на более старую, из-за несовмесимости с текущей версией fxp/composer-asset-plugin.
В качестве альтернативы предлагается использовать дополнительный composer-репозиторий, который кеширует npm и bower пакеты. Что тоже выглядит немного костыльно.
Если знаете, как поставить Yii без возни с ненужными фронтенд-пакетами — пишите в комментариях.
Все остальные компоненты
Шаблонизаторы
Шаблонизаторы ускоряют разработку и упрощают создание фронтенда приложения. Например, с помощью шаблонизаторов решается задача автоматического экранирования HTML.
Symfony
В Symfony по умолчанию используется Twig. Это обработчик шаблонов, который позволяет писать чистый код и расширяет возможности нативного PHP. Например, Twig упрощает создание экранирующих последовательностей.
Laravel
В этом фреймворке применяется шаблонизатор Blade. Он позволяет использовать код PHP в представлениях. Blade практически не влияет на скорость работы приложений, так как представления хранятся в отдельных файлах с расширением .blade.php . Код представлений преобразуется в нативный PHP.
Этот фреймворк не использует сторонних шаблонизаторов по умолчанию. Но разработчик может выбирать инструменты в зависимости от решаемых задач. В число рекомендуемых шаблонизаторов входят Twig и Smarty.
Промежуточный вывод: по данному критерию чистого победителя нет. Все фреймворки поддерживают работу с шаблонизаторами, что ускоряет разработку фронтенда приложений. Небольшое преимущество имеет Yii2, так как в нём не используется какой-либо шаблонизатор по умолчанию.
Изучайте Laravel на Хекслете Курс по Laravel входит в профессию «PHP-программист». Первые курсы в профессии доступны бесплатно после регистрации.
Модульность
В Symfony есть стандартные компоненты, которые можно использовать для создания приложений. То есть Symfony — отличный пример модульного фреймворка.
В Yii2 реализован подход MVC. В этом фреймворке тоже есть компоненты, однако модульность реализована не так хорошо, как в Symphony.
Laravel уступает Symfony и Yii2 в возможности использовать модульный подход для разработки приложений.
Промежуточный вывод: если вам нужен модульный PHP-фреймворк, выбирайте Symfony.
Установка
Каждый фреймворк поддерживает несколько вариантов установки. Например, Symfony, Laravel и Yii2 можно установить с помощью пакетного менеджера Composer. Все фреймворки после установки позволяют работать с шаблонным приложением.
Промежуточный вывод: по критерию простоты установки победителей нет, каждый из трёх инструментов легко устанавливать.
Скорость разработки
Symfony считается надёжным фреймворком, за которым стоит многочисленное и активное сообщество. Laravel быстро развивается и удерживает первое место в списке самых популярных фреймворков. Yii2 обеспечивает производительность приложений.
Если вам нужно как можно быстрее создать веб-приложение, и вы никогда не работали с PHP-фреймворками, выбирайте Laravel. Его проще всего изучать, и в сети больше всего руководств именно по Laravel.
Производительность
По мнению автора оригинальной статьи, наиболее производительным фреймворком является Yii2. Это оптимальный выбор для создания высоконагруженных приложений.
Производительность Laravel — дискутабельный вопрос. По этому критерию он уступает Yii2 и Symfony. Тем не менее в сети можно найти много рекомендаций по ускорению приложений на Laravel.
Поддержка баз данных
По этому критерию бесспорным лидером становится Symfony. Yii2 и Laravel отстают. Конкретную информацию можно увидеть в таблице.
Laravel | Yii2 | Symfony |
---|---|---|
Microsoft BI | Microsoft BI | Apache Jackrabbit |
MongoDB | MongoDB | CouchDB |
MySQL | MySQL | DynamoDB |
PostgreSQL | PostgreSQL | GraphDB |
Redis | Redis | MemBase |
SQLite | SQLite | MemCasheDB |
Microsoft BI | ||
MySQL | ||
MongoDB | ||
NoSQL | ||
Oracle | ||
PostgreSQL |
Сообщество и ресурсы
Многочисленное активное сообщество можно считать гарантией долгосрочной поддержки и развития инструмента. Вокруг рассматриваемых фреймворков сформированы большие сообщества. Комьюнити Symfony можно назвать наиболее зрелым.
Важный момент — будущее фреймворка лучше оценивать не по статичной величине сообщества, а по его динамике и активности.
Если оценивать такой ресурс, как документацию и обучающие материалы, здесь лидером будет Laravel.
Расширяемость
Функциональность фреймворков увеличивается с помощью расширений или пакетов. По этому критерию лидером остаётся Laravel. В каталоге Packalyst можно найти около 9000 пакетов для Laravel.
Yii2 и Symfony могут похвастаться 2800 и 2830 расширениями соответственно. Если для вас важна возможность расширить стандартную функциональность фреймворка с помощью дополнительных пакетов, выбор очевиден.
Схожесть характеристик
Выше мы рассматривали разницу между фреймворками. Пришло время сосредоточиться на похожих характеристиках. Вот они:
- Все три инструмента относятся к fullstack-фреймворкам. Они обеспечивают полный цикл разработки веб-приложения, включая фронтенд и бэкенд.
- Это проекты с открытым исходным кодом, который можно найти на GitHub.
- За Symfony, Laravel и Yii2 стоят многочисленные активные сообщества.
- Все три фреймворка поддерживают объектно-реляционное отображение (ORM). Поэтому эти инструменты удобно использовать в парадигме объектно-ориентированного программирования.
- Перечисленные фреймворки представляют собой надёжные и безопасные инструменты для создания веб-приложений.
Всё ещё не можете выбрать фреймворк? Вот тезисная информация, которая поможет определиться.
- есть LTS версии фреймворка;
- широкая функциональность из коробки;
- это самый стабильный фреймворк;
- есть готовые компоненты, что позволяет использовать при создании приложений модульный подход.
- поддерживает Ajax;
- обеспечивает быстродействие и производительность приложений;
- легко расширяемый фреймворк;
- есть встроенный обработчик ошибок;
- подходит для разработки веб-сервисов, построенных с учётом REST (RESTful web-service).
- самый популярный PHP-фреймворк;
- есть встроенный пакетный менеджер Composer;
- поддержка юнит-тестирования из коробки;
- большое количество пакетов для расширения функциональности.
Что в итоге
Yii — неплохой инструмент и если вам с ним комфортно — отлично.
В конце-концов, он практичен. Трудно представить задачу, которую невозможно решить, используя Yii.
Еще Yii невероятно популярен в СНГ. Зная его, очень легко найти как работу, так и сотрудников.
Но если у вас намечается новый долгосрочный проект, обязательно рассмотрите альтернативы.
Не выбирайте инструмент только из-за привычки.
Кроме того, вы всегда можете помочь команде фреймворка. Присылайте внятные баг-репорты, отправляйте пул-реквесты, пишите качественные расширения, помогайте новичкам на форуме и в gitter-е.
В этой статье рассматриваются три наиболее популярных PHP-фреймворка: Symfony, Laravel и Yii2. Автор сравнивает их возможности и пытается помочь читателю выбрать лучший инструмент. Статья предназначена для начинающих разработчиков, которые ещё не работали с PHP-фреймворками.
7. Простота настройки для лучшей производительности
Всем известно, что медленный сайт создает недовольных пользователей, поэтому Yii предоставляет вам несколько инструментов, которые помогут вам ускорить работу вашего приложения.
Все компоненты кеша Yii вышли из yii / caching / Cache , что позволяет вам выбрать любую систему кеширования, которую вы хотите, используя общий API. Вы даже можете зарегистрировать несколько компонентов кэша одновременно. В настоящее время Yii поддерживает кэширование базы данных и файловой системы, а также APC, Memcache, Redis, WinCache, XCache и Zend Data Cache.
По умолчанию, если вы используете Active Record, Yii выполняет дополнительный запрос, чтобы определить схему таблиц, участвующих в создании вашей модели. Вы можете настроить приложение на кеширование этих схем, отредактировав основной файл конфигурации следующим образом:
Наконец, в Yii есть инструмент командной строки, облегчающий минимизацию внешних ресурсов. Просто запустите следующую команду для создания шаблона конфигурации:
Затем отредактируйте конфигурацию, чтобы указать, какие инструменты вы хотите использовать для минимизации (например, Closure Compiler, YUI Compressor или UglifyJS). Сгенерированный шаблон конфигурации будет выглядеть так:
Затем выполните эту консольную команду для выполнения сжатия.
И наконец, отредактируйте файл конфигурации вашего веб-приложения, чтобы использовать сжатые ресурсы.
Примечание: вам придется загрузить и установить эти внешние инструменты вручную.
4. Поощряет тестирование
Yii тесно интегрирован с Codeception . Codeception – это отличная среда тестирования PHP, которая помогает упростить процесс создания модульных, функциональных и приемочных тестов для вашего приложения. Потому что вы пишете автоматизированные тесты для всех ваших приложений, верно?
Расширение Codeception упрощает настройку приложения во время тестирования. Просто отредактируйте предоставленный файл /tests/_config.php чтобы настроить тестовое приложение. Например:
Используя эту конфигурацию, произойдет следующее:
- Любые электронные письма, отправленные во время ваших функциональных и приемочных тестов, будут записаны в файл, а не отправлены.
- URL-адреса в ваших тестах будут иметь формат index.php/controller/action а не /controller/action
- Ваши тесты будут использовать вашу тестовую базу данных, а не производственную базу данных.
Специальный модуль для Yii Framework также существует в Codeception. Он добавляет несколько методов в класс TestGuy , которые помогают вам работать с Active Record (Yii’s ORM) во время функциональных тестов. Например, если вы хотите проверить, успешно ли в вашей регистрационной форме был создан новый User с именем пользователя «testuser», вы можете сделать следующее:
6. Сократить время разработки
Большинство проектов включают в себя определенное количество повторяющихся задач, с которыми никто не хочет тратить время. Yii предоставляет нам несколько инструментов, которые помогут вам тратить меньше времени на выполнение этих задач, а также больше времени на настройку вашего приложения в соответствии с потребностями ваших клиентов.
Один из самых мощных из этих инструментов называется «Gii». Gii – это веб-инструмент для создания кода, который позволяет быстро создавать шаблоны кода для:
- модели
- Контроллеры
- формы
- Модули
- расширения
- Действия и представления CRUD-контроллера
Gii легко настраивается. Вы можете установить его для загрузки только в определенных средах. Просто отредактируйте файл веб-конфигурации следующим образом:
Это гарантирует, что Gii будет загружаться только тогда, когда для переменной среды Yii задано значение development , и что он будет загружаться только при доступе через localhost.
Теперь давайте посмотрим на модель генератора:
Имя таблицы использует виджет typeahead, чтобы попытаться угадать, с какой таблицей связана ваша модель, и все поля имеют всплывающую подсказку, которая напоминает вам, как их заполнять. Вы можете предварительно просмотреть код, прежде чем попросить Gii его сгенерировать, и все шаблоны кода будут полностью настраиваемыми.
Это создаст новый шаблон миграции в / migrations, который выглядит примерно так:
Допустим, я хотел добавить несколько столбцов в эту таблицу. Я бы просто добавил следующее к методу up :
И затем, чтобы убедиться, что я могу отменить миграцию, я бы отредактировал метод down :
Создание таблицы будет просто включать команду в командной строке:
и удалить таблицу:
5. Упрощает безопасность
Безопасность является важной частью любого веб-приложения, и, к счастью, в Yii есть несколько замечательных функций, которые помогут вам расслабиться.
Yii поставляется с компонентом приложения Security, который предоставляет несколько методов, помогающих создать более безопасное приложение. Некоторые из более полезных методов:
- generatePasswordHash : генерирует безопасный хеш из пароля и случайной соли. Этот метод создает случайную соль для вас, а затем создает хеш из предоставленной строки, используя PHP-функцию crypt .
- validatePassword : это сопутствующая функция для generatePasswordHash , которая позволяет вам проверить, соответствует ли введенный пользователем пароль вашему сохраненному хешу.
- generateRandomKey : позволяет создать случайную строку любой длины
Для защиты от XSS Yii предоставляет еще один вспомогательный класс, называемый HtmlPurifier . Этот класс имеет единственный статический метод с именем process и будет фильтровать ваши выходные данные, используя популярную библиотеку фильтров с тем же именем.
Yii также включает готовые к использованию классы для аутентификации и авторизации пользователей. Авторизация делится на два типа: ACF (фильтры контроля доступа) и RBAC (управление доступом на основе ролей).
Более простым из них является ACF, и он реализуется путем добавления следующего к методу поведения вашего контроллера:
Предыдущий код говорит DefaultController разрешить гостевым пользователям доступ к login в login и view действия, но не действие create . ( ? это псевдоним для анонимных пользователей, а @ относится к аутентифицированным пользователям).
RBAC – это более мощный метод определения того, какие пользователи могут выполнять определенные действия в вашем приложении. Это включает создание ролей для ваших пользователей, определение разрешений для вашего приложения, а затем включение этих разрешений для их предполагаемых ролей. Вы можете использовать этот метод, если хотите создать роль Moderator и разрешить всем пользователям, назначенным на эту роль, утверждать статьи.
Вы также можете определить правила, используя RBAC, которые позволяют вам при определенных условиях предоставлять доступ к определенным аспектам вашего приложения. Например, вы можете создать правило, которое позволяет пользователям редактировать свои собственные статьи, но не те, которые были созданы другими.
Как выбрать PHP-фреймворк
Выбрать фреймворк помогут ответы на следующие вопросы:
- Какая функциональность у фреймворка, соответствует ли она нуждам проекта?
- Насколько сложно изучать выбранный фреймворк?
- Легко ли масштабировать проект, созданный с помощью данного фреймворка?
- Насколько активно развивается инструмент?
- Есть ли гарантированная долгосрочная поддержка (LTS)?
- Есть ли активное сообщество?
Заключение
Symfony, Laravel и Yii2 можно назвать отличными инструментами для разработки веб-приложений. Автор оригинальной статьи предпочитает Laravel. В то же время он считает Symfony и Yii2 не менее мощными инструментами. Особенностью Symfony можно назвать развитое сообщество, а особенностью Yii — надёжность и безопасность.
Пожалуйста, напишите в комментариях, какой PHP-фреймворк выбираете вы.
Адаптированный перевод статьи Michael J. Garbade How to choose a PHP framework. Мнение автора оригинальной публикации может отличаться от мнения администрации и сотрудников Хекслета.
2. Использует современные технологии
Yii – это чистый OOP-фреймворк, использующий некоторые из более продвинутых функций PHP, включая позднюю статическую привязку , классы и интерфейсы SPL , а также анонимные функции .
Все классы имеют пространство имен, что позволяет вам воспользоваться их автозагрузчиком, совместимым с PSR-4. Это означает, что включение вспомогательного класса HTML Yii так же просто, как:
Yii также позволяет вам определять псевдонимы, чтобы упростить ваши пространства имен. В приведенном выше примере этот оператор use загрузит определение класса, которое по умолчанию находится в каталоге /vendor/yiisoft/yii2/helpers . Этот псевдоним определен в классе BaseYii в строке 79:
Сам фреймворк устанавливается с помощью Composer, как и его расширения. Даже процесс публикации расширений так же прост, как создание собственного composer.json , размещение кода на Github и размещение вашего расширения на Packagist.
1. Простота установки
Для веб-разработчиков время – деньги, и никто не хочет тратить свое драгоценное время на сложный процесс установки и настройки.
Установка выполняется с помощью Composer . Если вам нужно описание процесса установки, Sitepoint недавно опубликовал отличную статью здесь . Я предпочитаю использовать базовый шаблон приложения, даже если на моем сайте есть отдельный фронтальный и внутренний компоненты. Вместо этого я предпочитаю использовать модуль для серверной части моих сайтов. (Модули Yii лучше всего описать как мини-приложения, которые находятся внутри вашего основного приложения).
Примечание . Многие из ссылок на каталоги в последующих примерах используют структуру каталогов из простого шаблона.
Будущее Yii
Скорость развития оставляет желать лучшего
Помните, как долго мы ждали версию 2.0?
А вы знаете, когда выйдет 2.1? Никто не знает.
2.0.x: 222 открытых тикета — No due date.
2.1.0: 58 тикетов — No due date.
2.2.x: 1 тикет — No due date.
Т.е. для 2.1 еще не определена дата релиза, а для 2.2 даже примерный скоуп задач. До третьей версии, о которой еще рано даже начинать говорить, мы вряд ли увидим кардинальные изменения в архитектуре.
Следует признать, что ближайшие конкуренты — Laravel и Symfony — внедряют новые фишки и выпускают версии гораздо резвее. У обоих конкурентов уже есть LTS-версии. Yii 2.1 вроде бы тоже должна иметь long-term support.
Компонентные фреймворки победили
Если кто-то напишет хорошее расширение для Yii — оно не выйдет за пределы комьюнити Yii.
Библиотека же, которую можно подключить без бубна к любому проекту, может улучшаться кем угодно.
Код, написанный на PHP, работает везде, а код, написанный на Yii — только на Yii.
Вы либо ставите на Yii всё, либо ничего. Это риск для долгосрочного проекта.
Конечно, приложив усилия, можно писать framework-agnostic код и разруливать все через DI-контейнер, но это не поощряется.
Если вы все-таки решитесь на это, вам прийдется забыть про Yii-вский ActiveRecord
или начать писать неприлично толстые прослойки между фреймворком и вашей бизнес-логикой.
Но это, мягко говоря, неоправданно.
Если вы наследуете какой-либо класс своего приложения от любого другого класса Yii, без Yii вы его работать не заставите, ведь он обязательно наследует Object или Component. Вот.
Даже если вы вытащите вместе с ним весь ворох родительских классов и реализуемых интерфейсов, это вам не поможет.
С модными нынче DDD и CQRS/Event Sourcing Yii также вам не помощник. Скорее, даже будет вставлять палки в колеса.
Команда фреймворка всё пишет сама. Даже VarDumper они написали свой, а не взяли из компонентов Symfony.
Регулярно поддерживать и улучшать столько компонентов — очень непростая задача для небольшой команды. И у этой команды есть два пути.
Во первых, можно оставить все как сейчас.
Все компоненты пишем сами. Сильная связанность. Полностью изолированная экосистема фреймворка. Небольшое уютное комьюнити. Медленная деградация.
Во-вторых, можно все-таки разбить монолитный Yii на независимые от фреймворка компоненты.
Но тогда это будет уже не Yii с простым и удобным API, а просто еще один набор компонентов, не востребованный вне экосистемы Yii.
Оба пути ведут в никуда.
PHP 7
Yii 2 без проблем работает под PHP 7+.
Однако чтобы использовать все возможности type-hinting-а, core-разработчикам придется переписать его до неузнаваемости.
Дело в том, что сейчас много методов принимают аргументы нескольких типов:
Таких мест в фреймворке очень много. Кого-то это бесит, кто-то считает это API удобным.
Но если мы хотим использовать тайпхинтинг, все это удобное API превращается в тыкву.
Qiang так и не вернулся
Полтора года назад на форуме Yii подняли интересный вопрос, мол, не забил ли Qiang Xue на свое детище?
Как бы там ни было, с тех пор от него так и не пришло ни одного коммита.
Возможно этот факт ничего не значит.
В любом случае поддержкой фреймворка сейчас занимаются замечательные ребята, и они хорошо справляются.
Symfony, Laravel и Yii2
Перед погружением в детали коротко рассмотрим главные особенности наиболее популярных PHP-фреймворков. Это Symfony, Laravel и Yii2.
Symfony
Symfony представляет собой набор PHP-компонентов, которые подходят для повторного использования. Фреймворк позволяет делать масштабируемые и производительные приложения. API Symfony интегрируется со сторонними приложениями, а также с инструментами для фронтенд-разработки, например, Angular JS.
Symfony используют многие популярные проекты, например, Drupal и phpBB. Даже самый популярный PHP-фреймворк Laravel построен на основе Symfony.
Laravel
По состоянию на середину 2019 года это самый популярный PHP-фреймворк в мире. Текущая стабильная версия — 5.8.10. Популярность Laravel подчёркивает следующий факт: многие хостеры предлагают специальные решения для приложений, созданных с помощью этого фреймворка.
Yii был представлен в 2008 году. Это безопасный, быстрый и производительный фреймворк для разработки веб-приложений. Текущая версия — 2.0.19.
В Yii2 используется пакетный менеджер Composer для управления зависимостями. Благодаря ленивой загрузке Yii2 считается самым быстрым PHP-фреймворком.
Ещё одна особенность Yii2 — интеграция с jQuery. Благодаря этому фронтенд-разработчикам удобно работать с приложениями, созданными на Yii2. Как и в Symfony, в Yii2 используются готовые компоненты. Это ускоряет разработку.
Какой PHP-фреймворк лучше
Все перечисленные фреймворки подходят для разработки веб-приложений. Однако у этих инструментов есть отличия, которые разработчик должен учитывать. Подробности ниже.
Зачем нужен PHP-фреймворк
PHP — один из самых популярных и востребованных языков программирования. Его активно используют крупные проекты, например, Facebook и «ВКонтакте». На PHP написаны популярные системы управления контентом (CMS), в том числе WordPress. На этом движке работает около трети всех сайтов в интернете и около 60 % сайтов на CMS.
PHP развивается, а версия 7 сделала этот язык стабильным. В таком случае, зачем нужны фреймворки и почему их часто используют вместо нативного языка? Вот несколько причин:
- Фреймворки ускоряют разработку. Например, PHP-фреймворк избавляет вас от необходимости писать запросы к базам данных. В фреймворках реализованы базовые функции CRUD, которые необходимы для работы с базами данных.
- Написанные на фреймворках приложения легко масштабируются.
- Поддерживать легче проект на фреймворке, чем на нативном PHP. Код фреймворков лаконичный, поэтому с ним просто работать.
- В PHP-фреймворках используется модель MVC. Она упрощает разработку.
- Приложения на фреймворках лучше защищены, чем приложения на чистом PHP.
- В фреймворках реализован принцип DRY. Это позволяет разработчикам писать меньше кода.
Нативный PHP позволяет делать приложения. Но перечисленных выше преимуществ достаточно, чтобы обратить внимание на фреймворки.
Полезная информация Почему Django — лучший фреймворк для разработки сайтов: статья о характеристиках и особенностях популярного веб-фреймворка.
Читайте также: