Знакомство с Laravel 5 простой блог с локальной разработкой на VirtualBox + Vagrant

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

    Сразу оговорюсь что до официального релиза (если не ошибаюсь то это 8 ноября 2014) не стоит использовать данную ветку на рабочих проектах.

    По ходу статьи будут рассмотрены настройка проекта в Vagrant, настройка phpStorm 8, и собственно разработка простого приложения с использованием Laravel 5. Не будем долго сопельки нажовывать тянуть, под катом читаем подробнее.

    Много говорить о Vagrant не собираюсь, так как уже не мало описано и на хабре и в сети, так что опишу просто:

    — качаем и ставим VirtualBox;
    — следом ставим Vagrant.

    Ну а теперь поехали, далее идут самые вкусности. Сами собирать бокс мы не будем, возьмем официальную виртуалку от разработчиков Laravel. В итоге мы получим довлольно мощное серьезно окружение (Ubuntu 14.04, PHP 5.6, HHVM, Nginx, MySQL), настроеное под нужды проекта. Сам бы я конечно заменил Ubuntu на Debian, ну да ладно, выбирать не из чего. Откроем терминал и выполним команду на скачивание образа:
    vagrant box add laravel/homestead

    В зависимости от скорости подключения, у вас уйдет от 5 минут на скачивание виртуалки, весит примерно 780 мб. Через git клонируем Homestead репозиторий, понадобится для настройки виртуальной машины и проекта.

    git clone github.com/laravel/homestead.git Homestead

    После чего в домашней дерриктории у вас появится папка Homestead, в которой необходимо будет отредактировать файл Homestead.yaml. В нем указываются пути до публичных ключей, локальный домен (по умолчанию homestead.app), а так же путь до папки с проектом. Для того что бы заработало HHVM необходимо дописать hhvm: true в узел sites Генерируем SSH ключ, вводим в терменале и далее все нажимаем Enter

    ssh-keygen -t rsa -C "your@email.com"

    И последний штрих перед стартом добавляем в файл /etc/hosts наш локальный домен

    127.0.0.1 blog.app

    Теперь в терминале перейдите в папку с проектом и достаточно ввести vagrant up и у нас запустится сервер, для остановки используйте vagrant halt. Теперь наш сайт доступен по адресу blog.app:8000, конфигурацию портов, которая задается при старте виртуальной машины, можно сменить в файле scripts/homestead.rb, но я этого делать не рекоммендую без острой необходимости.

    Так же вам может понадобиться подключиться по ssh к нашей виртуалке, нет ни чего проще пишем:

    vagrant ssh

    Пока у нас каталог с сайтом(/home/vagrant/Code/Laravel/public) пуст и нам необходимо установить Laravel и запустить проект. Но прежде чем это сделать давайте настроим phpStorm 8. Так как в нем появилась официальная поддержка шаблонизатора Blade, выбор пал именно на него. После запуска программы выберите File → New Project from Existing files... и создайте новый проект указав корневую папку /home/username/Code/Laravel

    image

    На следующем шаге вам будет предложено указать название проекта и адрес сайта, сайт укажите blog.app:8000/ Жмем далее а затем финиш.

    Теперь идем в меню Tools → Composer ->Init Composer в появившемся окне указываем итерпритаор(php) и путь до фала с composer.phar. Как установить Composer читаем тут. В корне проект у нас появится файл composer.json, с дефолтными настройками. Опять открываем Tools → Composer → Add dependency и встроке поиска ищем laravel/framework в левой колонке кликаем по найденому и в правой выбираем версию 5.0-dev, жмем Install



    Но по каким-то причинам Composer не может найти указанную версию, когда будет стабильно думаю все будет ок, так как 4.2.11 встает без проблем, в чистом проекте. Ну а пока пойдем окольными путями, в консоли:

    composer create-project laravel/laravel Laravel dev-develop --prefer-dist
    и проведите установку в ручную из консоли. Немного ждем и вот у нас уже все готово к работе, проверяем открыв в браузере адрес blog.app:8000/ должн появится знаменитый логотип Laravel.

    Если нет, загляните в лог, скорее всего там будут ошибки, на сегоднешний день возникла ошибка из-за отсутствия в корне проекта файла натройки окружения .env и из-за отстутствия папки ./storage/meta, возможно у вас будут другие, собственные. В файле .env:

    APP_ENV=local
    APP_KEY=sdsdfZsdf65FDdsd
    DB_USERNAME=root
    DB_PASSWORD=derev


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

    • представления и языки выведены в отдельную папку в корне resources
    • config, storage и database вынесены в корень приложения
    • а вот в папке app появились, так сказать, приятные изменения, теперь провайдеры и консольные команды лежат тут, в одноименных папках. Папка Http, тут все что связанно непосредственно с работой приложения: Controllers — соответственно понятно что тут контроллеры, Requests — классы для обработки форм (раньше это определялось в переменной $rules модели), теперь же у нас появился более мощный инструмент для обработки форм, Middleware — это фильтры маршрутов, так же, как и обработчики форм, реализуется в виде классов.


    Еще немного хочу сказать по поводу папки Middlevare. Буквально месяц назад эта папка называлась Filters, а теперь гляжу переименовына. Вот по этому и не стоит пока использовать данную версию фреймворка в боевых условиях, а хотя так хочется, тут же столько вкусностей появилось.
    Классная штука все таки пространство имен и классно что в Laravel 5 это чудо современного программирования поддерживается. Для того что бы ваши классы загружались без проблем достаточно просто в начале указать namespace App\Folder\Name.

    На этом о нововведениях пока все, остальное по ходу статьи.

    Для начала сконфигурируем приложение. Открываем файл config/app.php

    …
    'debug' => true,
    'url' => 'http://blog.app:8000',
    'timezone' => 'UTC',
    'locale' => 'ru',
    ...
    

    Редактируем файл config/database.php. Тут нам надо указать что по дефолту использовать mysql и параметры подключения, так же не плохо будет указать префикс таблиц в базе данных, я указал l5_:

    …
    'locale' => 'ru',
       ...
       'mysql' => [
          'driver'    => 'mysql',
          'host'      => 'localhost',
          'database'  => 'l5',
          'username'  => 'root',
          'password'  => 'derev',
          'charset'   => 'utf8',
          'collation' => 'utf8_unicode_ci',
          'prefix'    => 'l5_',
       ],
       ...
    ]
    …
    

    config/session.php, тут укажем где будем хранить сессии, мне больше нравится хранить в базе данных (тем более что механизм записи сессий в базу в laravel уже присутствует и не надо придумывать своих велосипедов) так и укажем:

    ...
    'driver' => 'database',
    …
    'table' => 'sessions',
    …
    

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

    Необходимо еще создать миграцию и прогрузить ее, для этого в терминале:

    php artisan session:table
    php artisan migrate:install


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

    Файл миграций ни чем не отличается от 4 версии фреймворка.

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

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

    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 20
    • –1
      В силу того что в России Laravel пока пользуется малой популярностью

      Я как-то решил попробовать этот фреймфорк, ставил через композер — натянуло библиотек на 20 с лишним метров…
      • 0
        А если сравнить с Symfony 2 или тем же Zend'ом дак там тот же размер примерно, ни чуть не меньше.
        • 0
          вы так говорите, как будто это что-то плохое.
          они же не в память при каждом запросе грузятся, эти 20+ метров.
          • 0
            Если говорить о памяти, на сколько я помню, то дебагер Symfony2 показывает что-то врайоне 5мб, на приложение из коробки, тобишь пустая главная страница. Laravel в этом же случае чуть больше 2мб
            • –1
              Я просто не понимаю зачем это.
              • 0
                Чтобы самому не писать эти 20мб при аналогичных возможностях, очевидно же.
                С опытом поймете.
          • +1
            Для попробовать все статьи хороши. А в целом еще рано использовать его честно говоря. Очень многое меняется и после composer update приходится многое переделывать, чтобы заработал код.
            Например недавно по сути все фильтры роутов были перенесены в middleware и теперь подключаются иначе и выглядят немного иначе (кстати сами фильтры как таковые вроде не были выпилены).
            Контроллеры теперь живут сами по себе и не нуждаются в наследовании от базового контроллера, а значит не работают фильтры в них, как это было ранее.
            очень удобный метод $router->controller Тейлор тоже выпилил из кода (хотя ответил мне, что сделает пакет для этого дела). Зато появилась возможность указания filter/middleware и разных параметров и прочего через док блоки в контроллерах прямо к методам или контроллеру в целом (проблема в том что сканер сканит их только из папки App, а у пакетов или при использовании измененной структуры (например модульная со своими путями), уже роуты не сгенерируются по докблокам… хотя это думаю пофиксят )))

            В общем пока ведется активная разработка и много изменений
            • +2
              Зато появилась возможность указания filter/middleware и разных параметров и прочего через док блоки

              Именно это мне в первую очередь (не считая поддержки нэймспэйсов) мне и понравилось в пятой версии, данная вещь мне нравилась еще в Symfony, а поскольку Laravel разрабатывает Тейлор, этого стоило ожидать
              • 0
                Так это пятая версия, composer update её не подтянет, так что всё ок.
                • 0
                  я именно о ней и говорю. Недавно начал проект писать, т.к. проект с нуля — выбор пал именно на 5-ку дев, но уже за этот короткий период очень много изменений. Т.е. по моему пока можно лишь побаловаться, ну или тратить некоторое время при обновлениях )))
              • 0
                PhpStorm уже научился хорошо работать с Laravel? А то я как-то раз пытался пощупать что за зверь этот фреймворк, но не смог добиться адекватной работы. Погуглил, нашёл какие-то вспомогательные интерфейсы — не помогло.
                • +1
                  С четвертой таки нет, только Blade, но вот с пятой уже дружит более менее
                  • +1
                    В чем дружба заключается? Инжектор и в четверке поддерживался отлично. А с фасадами беда, только ide-code-helper спасает.
                  • 0
                    ide-helper как тут уже писали в данном вопросе помогает. подключается для dev окружения и вперед. по другому с фасадами никак имхо не решить — все-таки вызовы через callstatic все идут. Ну а так вполне себе удобно и ничем не мешает. Можно вообще стараться код писать не особо используя фасады, тогда вовсе проблем с этим не возникает
                  • +1
                    Дежурно предупрежу вслед за Тейлором, что сейчас ничего на Laravel5 писать нельзя, так как фреймворк еще даже не в бете и активно переписывается. После composer update вы рискуете получить кирпич.
                    • 0
                      Дежурно, не дежурно. Но такова суть и не раз с этим сталкивался, что программисты, особенно те кто только начали свой путь в этой сфере считают что чем новее тем лучше не смотря на то что это только девелоперская версия.
                    • +5
                      Как по мне, так надоело видеть статьи типа «Пишем блог на Zend 1», «Пишем блог на Zend 2», Symphony, Yii и так далее.

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

                      Ну что это за разработчик такой, который доки на английском прочесть не может?

                      Если я не прав, вы уж простите :)
                      • 0
                        Тут больше, я думаю, смысла в расширении сообщества. Т.е. пишется для тех, кто и не смотрел в сторону {{framework-name}}. Заинтересовался, полез в гайды и мануал на офф. сайте.
                      • 0
                        ИМХО Homestead (единственный контейнер под все проекты) — крайне скверная идея, т.к. снова ломает проблему, которую изначально решает vagrant: распространяемое решение виртуализации для разработки.
                        Vagrantfile должен находиться в директории проекта, как завещал великий Джоел (возможность собрать продукт в 1 шаг), а не находиться в отдельном, который надо подстраивать под каждый проект (причем каждому из разработчиков), а потом еще и hosts на хостовой ОС править.

                        Поэтому использование чистого вагранта без homestead предпочтительнее.
                        • 0
                          Мы тоже начали проект на L5, полностью осознавая, что не всё будет гладко. Но достаточно читать с утра ченджлоги dev-веток фреймворка и приложения-скелета и не запускать бездумно composer update, обновляя только нужные пакеты — и проблемы минимальны. У меня уходит на фиксы примерно 15-20 минут в день, да и то не каждый день.

                          Так же стоит упомянуть laravel/elixir, это обёртка для Gulp с готовыми задачами, наиболее часто возникающими при разработке. Скомпилить coffe/less/sass и минифицировать результат с ревизионированием, просканировать роуты и события и т.д.
                          Сегодня поставил, и не имея почти никакого опыта работы с подобными инструментами, за пару часов разобрался, нашел пару багофич, написал своих задач и уже используется в проекте.

                          В общем-то работает, но как и L5, использовать на свой страх и риск.

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