- PVSM.RU - https://www.pvsm.ru -
Несколько месяцев назад наша компания решила выбрать корпоративный PHP-фреймворк, который мы бы использовали для большинства не сильно сложных проектов. До этого у нас был целый зоопарк: Symfony, Zend Framework, Yii — кому что больше нравилось. После рассмотрения популярных фреймворков мы решили попробовать Laravel [1]. Результатом нескольких обучающих дней стал конспект [2], в котором строится простенькое приложение, но так как подробный туториал уже присутствует на хабре [3], то я решил написать только о четырёх инструментах, которые будут полезны при разработке и о которых почему-то не упоминают в туториалах:
Впервые установив Laravel и открыв вашу любимую IDE, вы испытаете шок (ну, я-то уж точно был шокирован, может, вы окажетесь покрепче) -- у вас не будет работать автодополнения для «фасадов» и ваших моделей. Ваш код будет выглядеть примерно так:
Вы, конечно, можете вовсе отказаться от фасадов [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 Debugbar [5] — пакет, который интегрирует в фреймворк PHP Debug Bar.
Очень удобный инструмент, позволяющий контролировать и отлаживать код. Вы всегда будете в курсе того, сколько произошло запросов (если, вдруг, забыли дописать ::with('smth')
), сколько они заняли времени, что записалось в лог, сможете посмотреть информацию о текущем пользователе, какие виды использовались для генерации страницы, какие данные в них передавались и многое другое. Также в любой момент вы сможете просмотреть информацию о предыдущих запросах, даже если произошёл редирект.
Вот так выглядит открытый дебагбар:
Debugbar может показывать следующую информацию (кроме стандартных коллекторов PHP Debug Bar в него включены и некоторые кастомные):
QueryCollector
: Все выполненные запросы и сколько времени они занялиRouteCollector
: Информация о текущем роутеViewCollector
: Использованные виды (опционально может показывать данные переданные в виды, но это может сказаться на скорости вашего приложения)EventsCollector
: Все события, стоит поизучать, в Laravel много различных событийLaravelCollector
: Версия Laravel и информация об окружении (по умолчанию отключено)SymfonyRequestCollector
: Информация о запросе и ответеLogsCollector
: Показывает последние записи лога (даже выполненные при предыдущих запросах). (по умолчанию отключено)FilesCollector
: Файлы .php, которые использовались при запросе (по умолчанию отключено)ConfigCollector
: Конфигурация приложения (по умолчанию отключено)LogCollector
: Лог Monolog, если включён коллектор MessagesCollector
, то этот лог показывает и MessageCollector
PhpInfoCollector
: Информация о версии PHPMessagesCollector
: Сообщения логов (работает с любыми 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 [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;
В Laravel 4.2 нам представили Homestead [7] — Vagrant [11]-бокс (образ виртуальной машины), который содержит в себе всё необходимое для разработки на Laravel (и не только, в конечном счёте — это просто виртуальная машина). Я считаю, что это очень здорово, что популярный фреймворк представил нам официальный бокс. Надеюсь, это поможет популяризации линукса для разработчиков в целом. И многие начинающие разработчики, которые используют Windows и пытаются начать сидеть на Денвере или на чём-то подобном, попробовав линукс (а с вагрантом — это совсем несложно), будут вести разработку в профессиональном и близком к боевому окружении. Поэтому дальше я буду больше внимания уделять установке Homestead на Windows, и, надеюсь, сделаю мир чуть лучше.
Homestead избавит от необходимости задумываться о вашей операционной системе или об операционной системе вашего коворкера, версиях или наличии требуемого программного обеспечения необходимого для разработки.
Он позволит добавлять новые сайты в ваше девелоперское окружение с помощью одной только команды, а также синхронизирует любое количество указанных в конфигурации папок между вашей «реальной» системой (дальше мы будем называть её гостевой) и виртуальной машиной. То есть вы сможете продолжать редактировать код в своей операционной системе, используя свой любимый редактор, а файлы будут автоматически синхронизироваться с виртуальной машиной.
Homestead включает в себя:
Для начала устанавливаем 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
Для добавления новых сайтов есть два способа:
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
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/
Нажмите здесь для печати.