- PVSM.RU - https://www.pvsm.ru -

Полезные инструменты для разработки на Laravel

Полезные инструменты для разработки на Laravel

Несколько месяцев назад наша компания решила выбрать корпоративный PHP-фреймворк, который мы бы использовали для большинства не сильно сложных проектов. До этого у нас был целый зоопарк: Symfony, Zend Framework, Yii — кому что больше нравилось. После рассмотрения популярных фреймворков мы решили попробовать Laravel [1]. Результатом нескольких обучающих дней стал конспект [2], в котором строится простенькое приложение, но так как подробный туториал уже присутствует на хабре [3], то я решил написать только о четырёх инструментах, которые будут полезны при разработке и о которых почему-то не упоминают в туториалах:

  1. Laravel IDE Helper Generator [4]
  2. Laravel 4 Debugbar [5]
  3. Faker [6]
  4. Homestead [7]

Laravel IDE Helper Generator

Впервые установив Laravel и открыв вашу любимую IDE, вы испытаете шок (ну, я-то уж точно был шокирован, может, вы окажетесь покрепче) -- у вас не будет работать автодополнения для «фасадов» и ваших моделей. Ваш код будет выглядеть примерно так:

Полезные инструменты для разработки на Laravel

Вы, конечно, можете вовсе отказаться от фасадов [8] в своём коде, но есть и не такое радикальное решение — Laravel IDE Helper Generator [4]. Это пакет, который на основе кода, использующегося в вашем приложении, генерирует файл-хелпер, содержащий сгенерированные статические классы фасадов. Классы никак не используются приложением, а нужны только для автодополнения IDE.

Установка

Устанавливаем через composer

composer require barryvdh/laravel-ide-helper:1.*

Добавляем новый сервис провайдер в массив провайдеров в файле app/config/app.php:

'BarryvdhLaravelIdeHelperIdeHelperServiceProvider'

Теперь можно генерировать файл-хелпер для фасадов

php artisan clear-compiled
php artisan ide-helper:generate
php artisan optimize

если вы не описали соединение с бд, то выскочит ошибка Could not determine driver/connection for DB — это нормально, файл всё равно сгенерируется

Для того чтобы сгенерировать док-блок с описанием eloquent-моделей (на основе соответствующих им таблиц):

php artisan ide-helper:models

Генератор предложит вам добавить док-блок в существующий класс модели или в отдельный файл _ide_helper_models.php. Я предпочитаю добавлять в модели, но это вопрос вкуса

Laravel 4 Debugbar

Laravel Debugbar [5] — пакет, который интегрирует в фреймворк PHP Debug Bar.
Очень удобный инструмент, позволяющий контролировать и отлаживать код. Вы всегда будете в курсе того, сколько произошло запросов (если, вдруг, забыли дописать ::with('smth')), сколько они заняли времени, что записалось в лог, сможете посмотреть информацию о текущем пользователе, какие виды использовались для генерации страницы, какие данные в них передавались и многое другое. Также в любой момент вы сможете просмотреть информацию о предыдущих запросах, даже если произошёл редирект.

Вот так выглядит открытый дебагбар:

Полезные инструменты для разработки на Laravel

Debugbar может показывать следующую информацию (кроме стандартных коллекторов PHP Debug Bar в него включены и некоторые кастомные):

  • QueryCollector: Все выполненные запросы и сколько времени они заняли
  • RouteCollector: Информация о текущем роуте
  • ViewCollector: Использованные виды (опционально может показывать данные переданные в виды, но это может сказаться на скорости вашего приложения)
  • EventsCollector: Все события, стоит поизучать, в Laravel много различных событий
  • LaravelCollector: Версия Laravel и информация об окружении (по умолчанию отключено)
  • SymfonyRequestCollector: Информация о запросе и ответе
  • LogsCollector: Показывает последние записи лога (даже выполненные при предыдущих запросах). (по умолчанию отключено)
  • FilesCollector: Файлы .php, которые использовались при запросе (по умолчанию отключено)
  • ConfigCollector: Конфигурация приложения (по умолчанию отключено)
  • LogCollector: Лог Monolog, если включён коллектор MessagesCollector, то этот лог показывает и MessageCollector
  • PhpInfoCollector: Информация о версии PHP
  • MessagesCollector: Сообщения логов (работает с любыми PSR-3 логгерами)
  • TimeDataCollector: Время выполнения
  • MemoryCollector: Количество использованной памяти
  • ExceptionsCollector: Исключения

Кстати, в Laravel 4.2.2 из фреймворка убрали Whoops [9] (это та самая красивая страница ошибки для разработчиков), теперь там используется SymfonyDisplayer, который просто показывает стек-трейс, и, если вы привыкли видеть параметры запроса и прочее, то Laravel Debugbar поможет вам спокойнее пережить это изменение. Работает, естественно, только в debug-режиме.

Установка

composer require barryvdh/laravel-debugbar:dev-master

Добавляем новый провайдер в массив провайдеров в файле app/config/app.php:

'BarryvdhDebugbarServiceProvider',

Добавляем ресурсы этого пакета (стили, js)

php artisan debugbar:publish

В документации к пакету автор отмечает, что ресурсы могут меняться от версии к версии и советует добавить эту строчку в ваш composer.json:

"post-update-cmd": [
    "php artisan debugbar:publish"
],

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

php artisan config:publish barryvdh/laravel-debugbar

А дальше уже редактировать файл app/config/packages/barryvdh/laravel-debugbar/config.php.

Faker

Faker [6] — библиотека, которая не привязана к Laravel, но очень удобная для того, чтобы использовать её в сидерах. Faker генерирует различные тестовые данные: конечно строки, числа, тексты любых размеров. Разного рода пользовательские данные: имена (учитывая пол), номера телефонов, емейлы. Данные адресов: улицы, страны, координаты и т.д. Время во всевозможных форматах, адреса сайтов, ip, юзерагенты браузеров, данные банковских карточек, цвета, баркоды, разнообразные хеши.
Отдельно стоит упомянуть о генерации изображений, для этого Faker использует LoremPixel [10] генератор и аккуратно копирует файлы изображений требуемого размера и направленности в указанную папку:

$filename = $faker->image('image/dir', 300, 300, 'cats');

Также есть возможность «зафиксировать» случайные тестовые данные, то есть сделать так, чтобы каждый раз Faker генерировал одинаковые данные, для этого достаточно установить seed:

$faker = FakerFactory::create();
$faker->seed(1234);
echo $faker->name; // всегда 'Vera Gzhel'

Можно обеспечить уникальность и опциональность данных:

for ($i=0; $i < 5; $i++) {
    // всегда разные цифры
    $values[]= $faker->unique()->randomDigit;
}

for ($i=0; $i < 5; $i++) {
    // иногда цифра, иногда null 
    $values[]= $faker->optional()->randomDigit;
}

Также можно локализовывать данные, передав в конструктор требуемую локаль

$faker = FakerFactory::create('ru_RU');
echo $faker->name; // Вера Гжель

Установки как таковой нет, просто подгружаем композером

composer require fzaninotto/faker:1.4.*@dev

и пользуемся

$faker = FakerFactory::create('ru_RU');
echo $faker->name;

Homestead

В Laravel 4.2 нам представили Homestead [7]Vagrant [11]-бокс (образ виртуальной машины), который содержит в себе всё необходимое для разработки на Laravel (и не только, в конечном счёте — это просто виртуальная машина). Я считаю, что это очень здорово, что популярный фреймворк представил нам официальный бокс. Надеюсь, это поможет популяризации линукса для разработчиков в целом. И многие начинающие разработчики, которые используют Windows и пытаются начать сидеть на Денвере или на чём-то подобном, попробовав линукс (а с вагрантом — это совсем несложно), будут вести разработку в профессиональном и близком к боевому окружении. Поэтому дальше я буду больше внимания уделять установке Homestead на Windows, и, надеюсь, сделаю мир чуть лучше.

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

Homestead включает в себя:

  • Ubuntu 14.04
  • PHP 5.5
  • Nginx
  • MySQL
  • Postgres
  • Node (+ Bower, Grunt и Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Laravel Envoy
  • Fabric + HipChat Extension
Установка

Для начала устанавливаем Vagrant [12] и VirtualBox [13], установщики не задают лишних вопросов, поэтому установка пройдёт безболезненно.
После установки вагранта установщик попросит перезагрузить систему. Во время перезагрузки войдите в BIOS и проверьте, включена ли у вас Intel Virtualization Technology (VT-x, AMD-V, честно говоря, я не уверен в том, как это может называть в разных системах), если нет, то включите.

Откройте консоль, если вы пользуетесь Windows, то откройте Git Bash (а если он не установлен, то установите [14]), он нам ещё понадобится, добавьте Homestead бокс, выполнив:

vagrant box add laravel/homestead

Пока бокс скачивается, склонируйте репозиторий с конфигурацией для Homestead. Документация советует клонировать в папку, где будут хранится все ваши проекты (например, C:/Users/YourName/Workspace):

git clone https://github.com/laravel/homestead.git

Переходим в папку homestead, и открываем файл конфигурации Homestead.yaml, вот так он примерно будет выглядеть:

---
ip: "192.168.10.10" # ip вашей будущей виртуальной машины
memory: 2048        # количество выделяемой для неё памяти
cpus: 1             # количество используемых ею процессоров

authorize: /Users/me/.ssh/id_rsa.pub # путь к публичному ключу

keys:
    - /Users/me/.ssh/id_rsa # путь к приватному ключу

folders:                        # папки которые будут синхронизироваться между гостевой и виртуальной машинами
    - map: /Users/me/Code       # Какая папка гостевой (в вашей текущей) машины будет синхронизироваться с виртуальной
      to: /home/vagrant/Code    # какой путь к этой папке будет в виртуальной системе 

sites:                                      # список сайтов, которые автоматически настроятся при инициализации системы
    - map: homestead.app                    # адрес по которому будет доступен сайт
      to: /home/vagrant/Code/Laravel/public # директория на виртуальной (!) машине, в которой содержится точка входа (index.php) этого сайта

Если у вас нет ssh ключей сгенерируйте их с помощью ssh-keygen (в Windows доступна в Git Bash):

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

Пропишите публичный и приватный ключи в Homestead.yaml.

Укажите папку, где будут хранится (или уже хранятся) ваши проекты на гостевой (вашей) машине и соответствующий ей путь на виртуальной.
Создайте папку тестового сайта, например, test в директории проектов и добавьте в неё файл test/public/index.php:

// test/public/index.php
<?php
phpinfo();

Пропишите в Homestead.yaml путь к нему и адрес, по которому вы хотите, чтобы он был доступен. В итоге Homestead.yaml (для Windows) будет выглядеть примерно так:

---
ip: "192.168.10.10"
memory: 2048
cpus: 1

authorize: C:UsersYourName.sshid_rsa.pub

keys:
    - C:UsersYourName.sshid_rsa

folders:
    - map: C:UsersYourNameWorkspace
      to: /home/vagrant/Workspace

sites:
    - map: test.dev
      to: /home/vagrant/Workspace/test/public
    - map: anothersite.dev
      to: /home/vagrant/Workspace/anothersite/public

Добавьте в файл hosts гостевой машины соответствующие строки (для Windows: C:WindowsSystem32driversetchosts):

127.0.0.1 test.dev

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

запускаем, выполнив в директории homestead:

vagrant up

После того, как vagrant инициализирует и запустит виртуальную машину, вы можете проверить её работу, перейдя на test.dev [15]:8000.

На этом всё, теперь, всё, что вам понадобится для работы это всего лишь команда vagrant up.

Использование

Следующие порты гостевой машины перенаправляются к вашей виртуальной машине:

SSH: 2222 -> 22
HTTP: 8000 -> 80
MySQL: 33060 -> 3306
Postgres: 54320 -> 5432

то есть вы можете подключиться, например, к mysql с клиентской машины так:

mysql -u homestead -p -P 33060 -h 127.0.0.1

Имена пользователей и пароли для postgresql и mysql — как vagrant/secret так и root/secret.

Если вы подключаетесь к базе данных изнутри вашей виртуальной машины, то используйте стандартные порты.

Зайти на виртуальную машину можно выполнив:

vagrant ssh

Все vagrant-команды необходимо выполнять из директории homestead

Для добавления новых сайтов есть два способа:

  • Добавить в Homestead.yaml новый сайт

    sites:
        - map: test.dev
          to: /home/vagrant/Workspace/test/public
        - map: anothersite.dev
          to: /home/vagrant/Workspace/anothersite/public
        - map: new.dev
          to: /home/vagrant/Workspace/new/public
    

    и выполнить:

    vagrant provision
    

  • Или зайти на виртуальную машину и воспользоваться командой serve

    vagrant ssh
    serve new.dev /home/vagrant/Workspace/new/public
    

После добавления любым из этих способов, не забудьте обновить файл hosts: 127.0.0.1 new.dev

На этом всё. Приятной разработки!

Автор: boxfrommars

Источник [16]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/php-2/62176

Ссылки в тексте:

[1] Laravel: http://laravel.com/

[2] конспект: https://github.com/boxfrommars/ach

[3] присутствует на хабре: http://habrahabr.ru/post/197454/

[4] Laravel IDE Helper Generator: https://github.com/barryvdh/laravel-ide-helper

[5] Laravel 4 Debugbar: https://github.com/barryvdh/laravel-debugbar

[6] Faker: https://github.com/fzaninotto/Faker

[7] Homestead: http://laravel.com/docs/homestead

[8] отказаться от фасадов: http://taylorotwell.com/response-dont-use-facades/

[9] убрали Whoops: https://github.com/laravel/framework/pull/4378

[10] LoremPixel: http://lorempixel.com/

[11] Vagrant: http://www.vagrantup.com/

[12] Vagrant: http://www.vagrantup.com/downloads.html

[13] VirtualBox: https://www.virtualbox.org/wiki/Downloads

[14] установите: http://msysgit.github.io/

[15] test.dev: http://test.dev

[16] Источник: http://habrahabr.ru/post/225627/