Поэтапная разработка сайта на Laravel 4: урок №1

Вступительное слово

Всем доброго времени суток!

С сегодняшнего дня начинаю новую серию статей под названием «Поэтапная разработка сайта на Laravel 4». Серия будет полезна людям, только начинающим осваивать Laravel. В ней, урок за уроком, мы построим с нуля копию одного из моих сайтов: http://www.sbshare.ru. С одной стороны, он довольно несложный. С другой стороны, в нем используются многие базовые вещи из Laravel, владение которыми пригодится каждому разработчику на этом фреймворке.

Вкратце о сайте. Он представляет из себя сборник планет из вселенной недавно вышедшей в бету игры Starbound (http://playstarbound.com/). Это — основное назначение сайта. Но помимо простого списка планет, на сайте на данный момент реализованы следующие функции:

  • Регистрация пользователей (с функционалом подтверждения регистрационного e-mail’а и восстановлением забытого пароля)
  • Возможность любому посетителю добавлять в базу свою планету (для незарегистрированных пользователей для этого нужно вводить проверочный код (CAPTCHA) для предотвращения возможного спама)
  • Гибкий поиск по базе, используя различные критерии
  • Возможность любому пользователю оставлять комментарии к планетам (аналогично с CAPTCHA для незарегистрированных пользователей)
  • Нотификация администратора по e-mail о добавлении новых планет
  • Возможность добавлять тэги к планетам при создании/редактировании
  • Список всех тэгов планет с возможностью просмотра списка планет по определенному тэгу
  • Поддержка BBCodes в комментариях к планетам

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

  • Реализация MVC в Laravel, а именно:
    • Работа с фасадом View и шаблонизатором Blade
    • Создание своих контроллеров и маршрутизация
    • Создание своих моделей
  • Работа с Eloquent ORM, в частности:
    • Простейшие операции выборки/добавление/обновления в/из базы данных, в нашем случае MySQL
    • Создание связанных моделей, таких как один ко многим и много ко многим
  • Работа с возможностями Laravel по авторизации пользователей (Auth)
  • Готовый из коробки функционал для реализации восстановления забытого пароля пользователем
  • Работа с миграциями
  • Установка и использование дополнительных пакетов для Laravel (в нашем случае для реализации функционала CAPTCHA и BBCodes)
  • Использование возможностей кэширования в Laravel
  • Отправка электронных писем
  • Использование событий в Laravel
  • Работа с консольными командами Laravel (artisan commands) и написание своих

Как я уже говорил, серия рассчитана на начинающих, тот есть весь этот функционал будет описан из расчета на нулевое начальное знание Laravel’а. Если вы уже со всем этим знакомы, то эти статьи не для вас, они будут вам просто-напросто не интересны. Ну или может быть чуть-чуть — чтобы посмотреть на возможно альтернативную реализацию. Но в любом случае — я предупредил 🙂

Но тем не менее, я рассчитываю на владение следующими знаниями у читающих:

  • Уверенное владение PHP начиная с версии 5.3 и соответственно владение ООП. Понимание его основ: наследование, интерфейсы и т.д.
  • Понимание MVC и возможно опыт разработки с его применением на других фреймворках
  • Знание HTML на базовом уровне
  • Знание jQuery на базовом уровне
  • Знание SQL. Для реализации сайта напрямую это знание не нужно, но тем не менее умение писать SQL-запросы вручную поможет в понимании работы ORM и при написании миграций

Итак, о чем будет мой первый урок? В этой статье я постараюсь подробно описать процесс создания пустого Laravel-приложения разными способами, а также описать такую появившуюся недавно штуку, как Homestead, которая значительно ускоряет и упрощает весь этот процесс. Здесь также будет описана работа с Composer. Поэтому если вы уже спокойно умеете все это делать, можете смело переходить к следующему уроку.

Создание пустого Laravel-приложения

Как я уже говорил, для выполнения этой задачи существует несколько способов. Для управлениями своими зависимостями Laravel использует Composer. Для тех, кто впервые о нем слышит, могу пояснить, что Composer — это менеджер зависимостей для PHP. Это именно то, чего так долго не хватало разработчикам на PHP. Если раньше, создавая свой проект, приходилось по отдельности скачивать необходимые библиотеки и задумываться над тем, как их встраивать и использовать в своем приложении, то теперь все эти проблемы решает Composer. Посетите официальный сайт по ссылке https://getcomposer.org/ чтобы иметь более детальное представление о нем.

Наиболее нетерпеливым могу посоветовать посмотреть небольшой скрин-каст от Егора Громыко: Курс по Laravel 4 — 02: Установка.

Но не спешите пока устанавливать Composer на свою систему. Возможно Вам по душе больше будет работа с Homestead, в котором все, что нужно для работы, идет, что называется, «из коробки». Пожалуй с него я и начну.

Homestead

Что представляет из себя homestead и что это вообще такое? Homestead — это готовый виртуальный образ (или бокс (box)), содержащий все самое необходимое для разработки любого приложения на PHP, и в частности, Laravel. Суть заключается в том, что вы поднимаете на своем компьютере виртуальную машину с предустановленными (на момент публикации этой статьи):

  • Ubuntu 14.04
  • PHP 5.5
  • Nginx
  • MySQL
  • Postgres
  • Node (With Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Fabric + HipChat Extension

Помимо этого, в Homestead есть специальная команда для настройки виртуального сервера под новый проект, что заменяет ручную настройку. Все делается одной командой!

Одним словом, если в вашей системе еще не установлены вышеперечисленные технологии, то использование Homestead — предпочтительный подход. Если же все, что вам нужно для разработки на PHP, у вас уже установлено, и вы больше предпочтете работать не под виртуальной машиной, а на «родной», то можно пропустить этот раздел (что подразумевается под работой под виртуальной машиной? просто запуск виртуального сервера и кое-каких команд для обновления проекта; работать же с самим проектом (имеется ввиду править исходники) вы будете под родной системой, используя любимый редактор или IDE, будь то Sublime или PhpStrom). Но хочу тут отметить, что для целей этой серии статей, все эти технологии, идущие в homestead, нам не понадобятся. Нам нужны будут только сам PHP, веб-сервер (в случае с homestead — это nginx, но и под Apache Laravel-приложения работают отлично) и MySQL. Но все же опыт работы с homestead будет весьма полезным.

Сразу хочу отметить, что первоначальная подготовка для работы с homestead может занять некоторое время, ведь он упирается на такие вещи, как VirtualBox (https://www.virtualbox.org/) и Vagrant (http://www.vagrantup.com/). Но зато в последующем, разработка, по крайней мере в моем случае, значительно упростится и ускорится, как только виртуальная машина будет готовой и рабочей.

Итак, идем по порядку. Для начала нужно установить вышеперечисленное программное обеспечение (VirualBox и Vagrant). Они оба поддерживают все современные операционные системы и имеют установщики, так что проблем возникнуть не должно. Но лично я работаю на своем ноутбуке под управлением Windows 8 и столкнулся с небольшой проблемой при установке VirtualBox. Дело в том, что для работы Vagrant необходимо, чтобы исполняемые файлы VirtualBox были доступны из командной строки, а для этого нужно прописать путь к VirtualBox в переменной окружения PATH. Под Windows 8 это можно сделать следующим способом:

  • Нажмите комбинацию клавиш Win + Pause Break. В результате появится окно свойств компьютера.
  • В появившимся окне нажмите «Дополнительные параметры» (нижний пункт меню слева).
  • Во вновь появившемся окне во вкладке «Дополнительно» нажмите на «Переменные среды».
  • В одном из разделов («Переменные среды пользователя», либо «Системные переменные» — зависит от того, будете ли вы работать под одним пользователем, или же хотите, чтобы изменения коснулись всех пользователей системы) найдите переменную «Path» (регистр не имеет значения). Нажмите на кнопку «Изменить».
  • В поле «Значение переменной» добавте следующее: «;C:\Program Files\Oracle\VirtualBox» (без кавычек). Это в том случае, если вы установили VirtualBox в папку по умолчанию. В противном случае укажите ваш путь.
  • Ну и конечно же, везде теперь надо нажать «ОК».

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

Также, особенно если вы тоже работаете под Windows, потребуется установить Git. Он потребуется для скачивания некоторых дополнительных файлов для работы Homestead, а также для генерации ключей доступа к ssh виртуальной машины. Скачать последнюю версию Git’а, а также прочитать некоторые детали по его установке можно здесь: https://help.github.com/articles/set-up-git

Дальнейшее описание является по сути переводом официальной документации по Homestead, которую можно найти здесь: http://laravel.com/docs/homestead


Шаг первый — установка самого образа (бокса) Homestead. В командной строке нужно выполнить следующую команду:

Эта команда скажет Vagrant’у добавить бокс Homestead в свой внутренний репозиторий (образ будет скачан из так называемого vagrant cloud — облачного хранилища общедоступных образов). Этот процесс не быстрый, и даже с моим широким каналом, он длился порядка 15 минут.

Примечание: под Windows, если ваше имя пользователя содержит кириллицу (например «Вася»), то предварительно нужно выполнить команду:

Иначе vagrant выдаст ошибку, связанную с кодировкой.

Теперь нужно определиться с нашей структурой папок для работы. Лично я использую папку C:\4Work для всего, что связано с моей работой. В ней уже есть подразделение на папки в соответствии с фирмами, на которые я работал или продолжаю работать, а так же папка Private для личных проектов. Поэтому в статье я буду придерживаться этой структуры.

Далее необходимо скачать некоторые дополнительные файлы для Homestead’а (если хотите — файлы конфигурации). Сделать это можно как при помощи git (предпочтительнее, так как в этом случае вы сможете обновлять их запуском одной команды), так и вручную с http://github.com/laravel/homestead. При помощи git это делается следующим образом:

  • В командной строке перейти в папку C:\4Work:
  • Выполнить команду

При этом будет создана папка Homestead внутри c:\4Work.

Дальнейший шаг — настройка Homestead. И первым делом нужно сгенерировать пару ключей для ssh-доступа к виртуальной машине. Если у вас их еще нет, то сделать это можно при помощи следующей команды:

Под Windows эту команду следует выполнить не из обычной командной строки, а из Git Bash, установленного вместе с git. Вам будет задан вопрос, куда поместить файлы ключей. Для наших целей можно указать папку c:\4Work\keys.

В папке c:\4Work\Homestead вы можете найти файл Homestead.yaml — это файл конфигурации. С ним мы и будет работать сейчас.

Откройте его в простом текстовом редакторе, таком как блокнот, и отредактируйте в первую очередь пути к ключам. Для этого предназначены поля authorize и keys. В моем случае эта часть файла выглядит так:

Следующий пункт — указать общедоступные папки (shared folders), которые будут синхронизироваться между реальной и виртуальной машинами. Вообще можно указывать папку каждого проекта по-отдельности, но это не очень удобно. Ведь в дальнейшем при создании нового проекта придется вновь править файл и не просто перезапускать виртуальную машину, а делать vagrant destroy и vagrant up. Поэтому я бы рекомендовал просто настроить одну корневую папку, в нашем случае c:\4Work:

В этом случае все изменения в папке c:/4Work, в том числе и добавление нового проекта, будут сразу отображены в виртуальной машине внутри /home/vagrant/Code.

Дальше просто опишу последнюю секцию конифигурационного файла, а именно: настройка виртуальных серверов. Трогать эту секцию не обязательно, но она возможно будет полезной, если вам придется часто делать vagrant destroy. Выглядит по умолчанию она так:

Что означает, что будет поднят виртуальный веб-сервер, слушающий домен homestead.app, а в качестве корневой папки для сервера будет /home/vagrant/Code/Laravel/public. Аналогичным образом можно настроить уже имеющиеся у вас проекты в папке c:/4Work.

Примечание: для настройки локальных доменов нужно внести изменения в файл hosts в вашей системе. Под Linux этот файл находится в /etc/hosts. Под Windows: c:\Windows\System32\Drivers\etc\hosts. Для его изменения потребуются права администратора. И раз уж речь зашла об этом файле, можно сразу добавить в него домен, который будет использоваться на протяжении этих статей: sbshare.localhost. Выглядеть это будет так:

Впоследствии, когда мы наконец создадим пустой Laravel-проект, он будет доступен по адресу http://sbshare.localhost:8000/ из родной системы.

Теперь настало время запустить нашу виртуальную машину. Для этого в консоли перейдите в папку c:\4Work\Homestead и выполните команду

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

Примечание: у некоторых пользователей Windows могут возникнуть проблемы с запуском виртуальной машины: скрипт будет выводить сообщение много раз подряд:

Есть даже соответствующий отчет в репозитории Homestead’а: https://github.com/laravel/homestead/issues/32

Одна из самых частых причин этого — отключенная технология виртуализации в BIOS’е. Поэтому, если вы столкнетесь с этой проблемой, поищите соответствующую настройку в BIOS (Virtualization Technology). Она должна быть включена.

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

После запуска vagrant’а, следует проверить доступ к нему по ssh. Для этого запустите команду

В случае успеха, вы увидите пригласительные сообщения от Ubuntu:

Перед тем, как приступить к созданию Laravel-приложения, скажу несколько слов для тех, кто предпочитает работать под родной системой.

Как уже было сказано, для работы нам потребуются:

  • PHP версии не ниже 5.3.7
  • MySQL
  • Веб-сервер, nginx или Apache.

Расписывать здесь как все это поставить, я не собираюсь. Я рассчитываю на то, что человек, занимающийся разработкой на PHP, умеет это делать и, более того, имеет свои собственные предпочтения в плане этого софта, будь то отдельные установки каждого из этих компонентов, или же готовые сборки, типа WAMP’а и подобных. Я же, до появления Homestead, работал под Windows с установленным WAMP. Мне его для всего хватало. Но тут дело вкуса.

Так же, если вы будете работать под родной системой, нужно установить Composer, о котором речь шла выше. С его помощью мы создадим проект Laravel. Инструкции по установке можно прочитать здесь: https://getcomposer.org/download/

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

Итак, мы наконец подошли к тому моменту, когда у нас все готово для создания первого Laravel-приложения. Сделать это можно как минимум двумя способами: либо при помощи Compoesr, либо при помощи готового установочного .phar-файла. При дальнейшем описании буду полагать, что вы выбрали работу с Homestead, так как лично я считаю этот подход более удачным.

Начну с Composer’а. Создание пустого приложения — это выполнение всего лишь одной команды.

Итак, войдите в шелл vagrant’а, если это не было сделано до сих пор (vagrant ssh), и перейдите в паку /home/vagrant/Code/Private. Далее выполните эту самую команду:

Это создаст новый проект в папке /home/vagrant/Code/Private/sbshare, основанный на репозитории laravel/laravel. Обо всех зависимостях Laravel’а за вас позаботится Composer.

Этот метод хорош по двум причинам:

  • Вы будете видеть ход установки приложения
  • Опыт работы с Composer пригодится в будущем

Метод второй: установка при помощи готового установщика laravel.phar. Этот метод хорош тем, что проще в исполнении и, если верить официальной документации, быстрее, чем Composer. Но я, если честно, особой разницы в скорости не заметил.

Для начала скачайте laravel.phar по ссылке http://laravel.com/laravel.phar. Поместить его следует сразу в нашу общедоступную папку c:\4Work\ (чтобы он был доступен из-под vagrant’а). Ну либо как вариант скачивать его сразу из-под виртуальной машины посредством wget или curl.

Далее уже в самом шелле вагранта нужно переместить этот файл в /usr/local/bin:

Теперь мы сможем запустить этот установщик из любого места в системе. Убедитесь, что вы вышли из-под root-пользователя (команда exit) и находитесь в папке /home/vagrant/Code/Private и выполните следующую команду, которая является аналогом команды для Composer’а:

Результат будет абсолютно тот же самый.

Осталась самая малость: нужно настроить сервер для вновь созданного приложения. В homestead для этого нужно просто выполнить следующую команду:

Она создаст и настроит новый виртуальный сервер nginx, смотрящий в указанную папку. Стоит обратить внимание, что в качестве папки указана не сама папка sbshare, а вложенная в нее public. Именно она содержит так называемую точку входа в приложение (index.php).

Для остальных читателей, кто не пожелал пользоваться homestead, могу привести примерный файлы конфигурация для nginx или Apache.

Nginx:

Для Apache настройка виртуального хоста выглядит примерно так:

Теперь остается только проверить, насколько правильно мы все сделали. Нужно в браузере открыть http://sbshare.localhost:8000/ и увидеть приветственную страницу Laravel: «You have arrived».

На этом первый урок можно считать оконченным. Подводя итоги, мы научились устанавливать виртуальную машину с Homestead, освоили одну из команд Composer и создали пустой проект Laravel.

В следующем уроке я планирую рассказать о структуре проекта Laravel: о назначении всех папок и файлов. А если этого будет мало, то уже начнем вникать в такое понятие, как маршрутизация, и создание своих шаблонов.

Поделиться в соц. сетях

13 thoughts on “Поэтапная разработка сайта на Laravel 4: урок №1

  1. Игорь:

    Здравствуйте.
    «»
    В появившимся окне нажмите “Дополнительные параметры” (нижний пункт меня слева).
    «»
    Если это так не задумывалось, то там поправить надо «меня» на «меню» похоже.
    Спасибо за отличный цикл статей.

    1. Спасибо, исправил 🙂 В ближайшее время будет следующий урок (№3): либо сегодня, если я решу разбить то, о чем хотел рассказать, на два урока, либо уже завтра или в воскресенье.

  2. Станислав:

    Можно ли эти уроки поместить в пригодные для распечатки на струйнике файлы .doc или .pdf с сохранением цветов текста? Тяжеловато читать с экрана.

    1. Вообще у меня есть мысль сделать эти уроки в виде электронной книги, но подсветки кода не будет точно.

  3. nikkbv:

    Привет.

    Спасибо за уроки, они дают отличную базу для разработки собственного проекта и дальнейшего изучения laravel.

    Только вот есть одна проблема. Пытаюсь достучаться до сайта через браузер — не работает. Не один из доменов. Не видит он их и всё тут. Пробовал как здесь: создавать домены(конец статьи).

    Надеюсь на помощь и заранее спасибо.

  4. Aydar:

    C:/HashiCorp/Vagrant/embedded/gems/gems/bundler-1.6.2/lib/bundler/runtime.rb:224
    :in join': incompatible character encodings: IBM866 and Windows-1251 (Encoding:
    :CompatibilityError)
    вызвал команду: chcp 1251, теперь ошибка:
    C:/HashiCorp/Vagrant/embedded/gems/gems/childprocess-0.5.3/lib/childprocess/wind
    ows/process_builder.rb:43:in
    join’: incompatible character encodings: Windows-1
    251 and ASCII-8BIT (Encoding::CompatibilityError)
    что делать?

    1. В качестве альтернативного решения проблемы нужно изменить значение переменной окружения VAGRANT_HOME на путь, содержащий только английские символы. Как менять значения таких переменных под Windows написано в этом уроке в начале. Чуть позже я обновлю сам урок по поводу этого VAGRANT_HOME.

    1. Сайты на Laravel в легкую работают на обычных shared-хостингах. Единственное условие — хостинг должен позволять менять корневую папку веб-сервера (большинство позволяет), чтобы он смотрел в папку public. В противном случае придется помучиться с переносом папки public в корень папки с проектом. Хотя и на этот счет есть мануалы в сети, но так как сам этим никогда не занимался, конкретные ссылки дать не могу.

  5. 3elik:

    премного благодарен за отличное преподнесение материала.
    горю желанием увидеть остальные уроки =)

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.