Пользователь
0,0
рейтинг
10 октября 2014 в 21:29

Разработка → Знакомство с 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 версии фреймворка.

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

Проголосовал 231 человек. Воздержалось 60 человек.

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

Шаров Дмитрий @vlom88
карма
0,0
рейтинг 0,0
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Реклама

Самое читаемое Разработка

Комментарии (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, использовать на свой страх и риск.

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