Перевод некоторых глав из книги Bill Keck. Yii 2 For Beginners.

Предисловие


Добро пожаловать в Yii2 для начинающих. Эта книга проведёт вас шаг за шагом сквозь установку и развёртывание, а затем программирование на сегодняшний день самом увлекательном фреймворке Yii2.

Yii2 поставляется в двух вариантах, basic и advanced, и может показаться неестественно, использовать для начинающих шаблон advanced(продвинутый), но этот шаблон, по иронии судьбы, облегчает работу с приложением, если оно использует модели, которые хранятся в базе данных. Современные веб-приложения нуждаются в этой функциональности и шаблон advanced имеет в своём распоряжении для этого готовые решения.

Другое большое преимущество у шаблона advanced, это то, что приложение делится на frontend(пользовательская часть) и backend(модуль управления), который дает исчерпывающий ответ на постоянно возникающий вопрос: «куда же поместить модуль управления?»
Я бы хотел не только ввести вас в удивительный мир php фреймворка, но и так, же дать вам точку опоры, включающую все, в чем нуждается надежное веб-приложение управляемое базой данных. Хотя advanced шаблон содержит чрезвычайно полезные возможности, в нем, конечно же, отсутствуют важные части, которые мы будем пополнять с помощью этой книги.

Цель — предоставить вам модель шаблона, которую вы сможете использовать для всех ваших будущих проектов.

Возможности


С инсталляцией advanced шаблона вы получите некоторые возможности веб-приложения, включающие в себя:

  • предопределённую схему таблицы пользователей
  • форму входа и регистрации пользователей
  • функциональность восстановления забытого пароля
  • разделённые области пользователей (frontend) и администраторов(backend)
  • автоматическую генерацию кода для моделей, контроллеров и представлений
  • встроенную интеграцию с Twitter Bootstrap и приоритетную верстку для мобильных устройств
  • надежные виджеты и помощники для представления данных


Если вам что-то не понятно в этом списке, не волнуйтесь, мы раскроем их детально в дальнейшем. Только, знайте — это действительно изумительно, что делает Yii2 для вас. Но дело не в том, как велик тот или иной фреймворк, а в том, как вы все, же сможете это поддерживать и развивать в реальном приложении.

Для этого будем добавлять в приложение все, что в нем отсутствует из коробки:

  • красивые усовершенствования пользовательского интерфейса подобно jquery календарю
  • методы для зависимых моделей, которые облегчат отображения связанных данных
  • методы для контроллеров, которые разграничивают доступ
  • расширяемая структура данных, которые будут общими для всех ваших будущих приложений
  • управление доступом на основе ролей (RBAC)
  • ограничение содержания на основе типа пользователей, таких как «бесплатный» и «платный».
  • социальный модуль, который позволит поделиться
  • регистрация и вход с помощью Facebook

Это всё, вероятно потребуются для вашего приложения, не взирая на то, кого типа он будет. Поэтому если вы будете изучать Yii2 с помощь этой книги, вы будете в состоянии создать шаблон, который сможете расширять для всех ваших будущих приложений.

Эта книга идеальна для начинающих программистов, кто готов перейти на разработку с помощью фреймворка. 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 действительно блещет.

Комментарии (37)


  1. Invision70
    05.10.2015 19:47
    +12

    >>> Существует пара недостатков использования фреймворка, которые следует отметить. Во-первых, весь код, который включает в себя фреймворк, создает нагрузку на сервер и это может стать реальной проблемой.

    image


    1. luqmon
      05.10.2015 21:23
      -3

      image


  1. OnYourLips
    05.10.2015 19:49
    +3

    > Плюсы
    > Вот несколько очевидных преимуществ использования фреймворка
    Эти строки можно написать под любым современным фреймворком. Например Symfony или Laravel.
    За исключением одного пункта, который к Yii не относится:
    > — Использует стандартные способы решения задач, что уменьшает или устраняет запутанность кода.
    Наоборот. Другие фреймворки (такие, как Symfony или Laravel) используют стандартные сторонние компоненты, а Yii — нет.


    1. Claud
      05.10.2015 20:11

      Стандартные компоненты — это странная фраза. Если под ними подразумевается компоненты симфонии, то навряд ли они стандартные, скорей популярные. Yii с чего их должен использовать, когда у них первая ветка была писана уже давно, и наработок было воз и тележка: activerecord, request/response…


    1. luqmon
      05.10.2015 20:27

      Мне кажется в книге автор имел в виду MVC, activerecord и другие технологии, которые уменьшают или устраняют.
      Однако, используя стандартные способы решения задач можно так же запутать код, что черт с прожектором не разберёт.
      Это конечно же зависит от культуры программиста…


  1. Strate
    05.10.2015 21:12
    +7

    Статья ни о чём, доводы в пользу Yii ни о чём, перевод кривой.


    1. luqmon
      05.10.2015 21:29
      -13

      image



    1. luqmon
      05.10.2015 21:39
      -7

      читать между строк, кривой да живой


  1. bo883
    05.10.2015 21:38
    +3

    А мне не понравился yii2 как и многим моим коллегам — избыточен, чувство чрезмерной перегруженности не покидает.


    1. luqmon
      05.10.2015 21:45
      -5

      дела вкуса, но нам и китайцам в самый раз


      1. Alexufo
        06.10.2015 02:35

        Эти китайцы живут и работают давно в США.


    1. Invision70
      05.10.2015 21:48
      -2

      >> избыточен
      Значит не подходит для ваших задач


    1. alekciy
      07.10.2015 15:39

      Не холивара ради, но… Какую альтернативы выбрали?


  1. zelenin
    05.10.2015 22:40
    +2

    невыносимо читать. сразу видно, что пишет/переводит не носитель языка.


    1. luqmon
      05.10.2015 22:51
      -8

      … много читал Маяковского


      1. zelenin
        05.10.2015 22:53
        +3

        ваши комменты только подтверждают мои мысли — вы не дискутируете, а просто кидаете фразы невпопад.


        1. luqmon
          05.10.2015 22:59
          -17

          позвольте не согласиться на счет невпопад:

          я русский бы выучил
          только за то,
          что им
          разговаривает Путин. (С)


          1. zelenin
            05.10.2015 23:01
            +2

            не в силах запретить


  1. artem90
    06.10.2015 02:09

    Статья, на мой взгляд ни о чем. «Я выбрал yii2, потому что мне понравился yii2».

    Было бы хорошо, если в статье указать конкретные примеры, которые сразили сердце автора и втянули его в мир yii2.

    Я сторонник symfony2, но по долгу службы приходится сейчас писать на yii2.
    На мой взгляд, yii2 необоснованно усложнен, по сравнению с symfony2. Но об этом я напишу позже, когда смогу более объективно оценить плюсы и минусы обоих фреймворков, а так же когда у меня будет примерно равный опыт работы с обоими фреймворками.


    1. Alexufo
      06.10.2015 02:44
      +7

      Удивлен мнением, что Yii2 усложнен поболее, чем Symfony2. Первый раз такое встречаю. :-)


      1. Strate
        06.10.2015 10:30

        Видимо имеется ввиду что sf2 — стройный и логичный, а yii,… ну вы поняли.


      1. alekciy
        07.10.2015 15:40

        Мне кажется просто у автора книги больше другого опыта-то и небыло.


    1. Dromok
      06.10.2015 13:21

      yii сложнее чем symfony?! воу воу полехче… Сложнее симфони я пока ничего не встречал, а yii прост до безобразия.


  1. Dromok
    06.10.2015 12:57

    Активно использую Yii2, но в основном потому что из-за его популярности его часто требуют заказчики. Да, фреймворк вполне удобен, но на мой взгляд в нем много я бы сказал «шероховатых углов». Я очень удивлен, почему именно этот фреймворк набрал такую популярность, а не например CakePHP 3, который настолько прост, логичен, что я бы его активно рекомендовал всем новичкам. В кейке, например нет необходимости вообще создавать файл модели, модель генерируется автоматом, нет необходимости вызывать рендер вьюшки, он опять же подцепляется автоматом, а какая там офигенная ORM! Странно, что у нас он мало распространен.


    1. Invision70
      06.10.2015 14:15

      >> Активно использую Yii2, но в основном потому что из-за его популярности его часто требуют заказчики.
      Ваши заказчики лучше вас знаю какой фреймворк им использовать? Сочувствую.


      1. Dromok
        06.10.2015 14:24

        Да, есть умные заказчики, которые понимают, что если проект на малоизвестном фреймворке написан, то потом сложнее будет найти разработчика для его поддержки. А yii-специалистов сейчас куда не плюнь. Так что имхо вполне логично они поступают.


        1. alekciy
          07.10.2015 15:43

          Умные заказчики поминают, что умным разработчикам не принципиально, работать ли с CakePHP или с Yii. Или еще с чем-то. Работать можно на любом из них. Имхо, от заказчика можно принять выбор платформе только в одном случае — проект уже существует и работает на базе ХХ.


          1. Dromok
            07.10.2015 15:56

            Ок, допустим вы фрилансер и вам предложили хороший вкусный и не очень трудоемкий заказ. Вы предлагаете заказчику сделать его скажем на CakePHP, но заказчик хочет чтобы он обязательно был сделан на Yii, который к слову вы тоже знаете. Вы пошлете такого заказчика? Если инструмент мне знаком, то я соглашаюсь на условия заказчика.
            Скажем если бы я заказывал сайт на фрилансе, то я бы тоже не согласился на что-то экзотическое и малоизвестное (таким на текущий момент является CakePHP, который у нас не очень распространен).
            Конечно когда речь идет о мега огромном проекте, тогда уже я буду настаивать на инструменте, который мне кажется больше подойдет. Но когда речь идет об относительно небольших заказах, то как вы правильно заметили «разработчикам не принципиально, работать ли с CakePHP или с Yii» и если заказчику предпочтительнее второе, то значит сделаю на нем.


    1. Zhuravljov
      06.10.2015 19:10

      Модели в Yii2 несут в себе чуть больше смысла чем обычный маппинг в объекты. Если нужна простая выборка из БД в Yii2 тоже не нужно создавать модель. Единственное, на выходе будет массив а не объект, но не думаю что есть существенная разница. Пример:

      $rows = (new Query())->from('table_name')->all(); 

      И ORM у него как минимум не хуже чем у CakePHP.

      Про авторендер вьюшек, спорный вопрос. У меня были случаи когда из одного действия по условию нужно было рендерить разные вьювы. А если нужно получить json или xml то вьюв вообще не нужен. Поэтому, субъективно, явный вызов рендера выглядит логичнее.

      в нем много я бы сказал «шероховатых углов»

      Ну и помогите разработчикам, изложите свои мысли в багтрекере или на yiiframework.ru


      1. Dromok
        06.10.2015 23:19

        Я не считаю yii2 плохим фреймворком. Да и вообще на текущий момент он мой основной фреймворк. Благодаря огромному русскоязычному комьюнити я всегда могу задать вопрос и практически мгновенно получить ответ (в официальном чате), и я незнаю другого фреймворка, который мог бы похвастаться этим.

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

        Вы привели пример

        $rows = (new Query())->from('table_name')->all();
        я не спорю, что это будет работать, но это не выглядит красиво. Тоже самое на кейке будет выглядеть просто
        $this->TableName
        и в ответ будет объект. Даже если нужны связи, то их можно подцепить на лету, так и не создав файла модели. Это удобно для простых проектов. Когда надо что-то посложнее, то конечно файл модели лучше создать, да и бизнес логику в нее вынести неплохо. Повторюсь, я не говорю, что в yii что-то нельзя сделать, просто это выглядит не так красиво.


        1. alekciy
          07.10.2015 15:47

          Не неплохо, а обязательно. Потому что как минимум она уходит в СУВ где всегда можно поднять историю комитов и разобраться в проблеме даже в случае если в проект только один разработчик — ты сам.


          1. Dromok
            07.10.2015 16:10

            Слушайте, ну если я осознанный говнокодер, то что тут поделать. Меня достало это маниакальное следование каким-то строгим правилам. Когда речь идет о небольшом проекте и который надо сделать максимально быстро, я делаю его именно быстро и в этом случае как раз могу модели вообще не создавать и всю бизнес-логику оставить в контроллере. Я не понимаю когда кто-то воротит нос «фууу ты что не слышал о тонких контроллерах?» когда речь идет о сайте визитке. Когда речь идет о крупном проекте, то конечно, надо и модели создать и бизнес-логику туда вынести иначе потом это поддерживать станет невозможным.

            она уходит в СУВ где всегда можно поднять историю комитов и разобраться в проблеме даже в случае если в проект только один разработчик — ты сам.

            Что мешает поднять историю коммитов, даже в случае «толстых» контроллеров?


            1. alekciy
              07.10.2015 16:20

              Так я не про толстые контролеры, а про вынос бизнес-логики за код (в базу там, как в MODx).
              Про обязательно с в контексте «да и бизнес логику в нее вынести неплохо» перед «Когда надо что-то посложнее». Для среднего/большого СУВ и бизнес-логика в коде строго обязательны.


              1. Dromok
                07.10.2015 16:29
                +1

                Про вынос кода в базу, как-то жоско. Не представляю как это потом поддерживать. А в остальном согласен.


                1. alekciy
                  07.10.2015 17:20
                  +1

                  Ну вот так и поддерживается. Со слезами, соплями и бэкапами. Я просто подумал было, что в CakePHP так же, если он все так хорошо берет на себя.


                  1. Dromok
                    07.10.2015 17:27

                    Не-не, в CakePHP таких извращений нет.