Установка Laravel, как это принято для вёб-движков, начинается со скачивания последней версии фреймворка. Последняя версия из третьей ветки — 3.2.14.
Laravel может находиться в любой папке на сервере, если к папке public предоставлен доступ извне — либо с помощью символической ссылки, либо настройкой виртуального хоста (см. ниже).
Основные папки Laravel могут быть даже разнесены, если в файле paths.php указано их новое размещение. Если paths.php не находится на один уровень выше public (т.е. в public/../paths.php), то public/index.php нужно будет также немного изменить.
Назначение основных папок Laravel (см. тж. настройку):
- application — папка системного пакета — хранит общие настройки среды для подключения к БД, драйвер сессии, загрузчик языковых файлов, системная кодировка и язык и прочее.
- bundles — папка сторонних пакетов (пакет — самодостаточная сборка скриптов, например, для рисования графиков или отправки e-mail). Каждый пакет содержится в своей подпапке, которая в свою очередь содержит почти те же папки и файлы, что и системный пакет (application).
- laravel — PHP-скрипты самого фреймворка. Каждая папка соотносится с соответствующим пространством имён Laravel.
- public — единственная папка, которая должна быть видна из интернета — содержит элементы оформления страниц — картинки, файлы CSS и JavaScript и т.д.
- storage — папка с создаваемыми файлами — кеш, данные сессии, логи и т.д.
- vendor — содержит сторонние библиотеки наподобии bundles, но в отличии от последней эти библиотеки никак не связаны в Laravel. Например, класс для генерации RSS-лент может размещаться здесь, тогда как пакет с интерфейсом к нему — в bundles.
Короткие URL
Так как всё общение с Laravel со стороны сервера происходит через папку public, то, если мы устанавливаем его в http://localhost/laravel/, пути в браузере будут выглядеть как http://localhost/laravel/public/index.php/user/123/. Однако это поведение по умолчанию (рассчитанное на работу на любом сервере), и его можно изменить.
От нашего решения зависит, где расположить файлы фреймворка — пока распакуйте скачанный архив во временную папку.
Если вы используете //((http:httpd.apache.org Apache с модулем mod_rewrite, то мы можем убрать index.php из пути. Для этого откройте файл application/config/application.php и установите параметр index в пустую строку:
'index' => '',
Если вы оставите структуру папок Laravel прежней и public будет лежать там же, где paths.php, laravel и т.д., то мы можем убрать public/ из пути. Есть несколько способов:
- с помощью mod_rewrite — самый простой. Создайте в папке, куда вы извлекли архив (она содержит paths.php), файл .htaccess и впишите туда эти строки:
confRewriteEngine on
RewriteCond %{REQUEST_URI} !^public
RewriteRule ^(.*)$ public/$1 [L]
- директивами Alias или DocumentRoot — лучший вариант, если вы можете настраивать виртуальный хост в главном конфигурационном файле Apache (httpd.conf). Если вы располагаете Laravel в корне хоста (например, http://localhost/), то используйте DocumentRoot, иначе — Alias (требует mod_alias). Например:
conf# Запрос http://localhost/mypage/123 будет перенаправлен в # C:/apache/htdocs/localhost/public/mypage/123, который в свою очередь преобразуется в # C:/apache/htdocs/localhost/public/index.php/mypage/123, если доступен mod_rewrite. DocumentRoot "C:/apache/htdocs/localhost/public" # Вместо DocumentRoot можно использовать Alias с тем же принципом работы. # mod_rewrite будет работать так же, как и в случае с DocumentRoot выше. Alias /laravel "C:/apache/htdocs/localhost/laravel/public"
- символической ссылкой — доступно только на *nix-системах и только если у вас включена опция FollowSymLinks в настройках виртуального хоста (или вы можете её включить с помощью директивы
PHPOptions
). Обычно это самый оптимальный вариант, так как не затрагивает работу сервера, но вам нужен доступ к командной строке сервера. Для включения вам нужно сделать две вещи:- Создать ссылку командой ls на папку public в папке виртуального хоста (его корня или подпапки, в зависимости от того, где будет виден фреймворк из сети). Например:
shln -s /usr/local/www/laravel/public /home/mysite.ru/pub/mylaravel
— сделает его доступным по адресу http://mysite.ru/mylaravel. - Включить FollowSymLinks в httpd.conf или .htaccess:
- Создать ссылку командой ls на папку public в папке виртуального хоста (его корня или подпапки, в зависимости от того, где будет виден фреймворк из сети). Например:
confOptions +FollowSymLinks
Есть также ещё один вариант для быстрой настройки хоста под Laravel — не требует mod_rewrite (только mod_alias) и может использоваться при разработке, когда короткие URL не нужны:
conf# Перенаправит запросы в корень фреймворка в подпапку public: RedirectMatch ^/?mylaravel/?$ http://localhost/mylaravel/public
Настройки и профили
Глобальные настройки «приложения» («application») на Laravel хранятся в папке application/config/. Она содержит PHP-файлы, возвращающие массивы параметров, которые могут быть вложенными, например:
<?php
return array(
'key' => array(
'subkey_1' => 'value 1',
'subkey_2' => 'значение 2',
),
'another_key' => 'значение'
);
Запятая после последнего элемента может быть опущена (как после another_key). Настройки можно прочитать с помощью PHPConfig::get
, передав строку вида: [пакет::]файл.ключ[.подключ[...]] — например:
- если код выше располагается в application/config/myconfig.php, то прочитать значение 2 можно строкой myconfig.key.subkey_2.
- для файла bundles/mybundle/config/myconfig.php то же значение доступно по строке mybundle::myconfig.key.subkey_2.
В Laravel есть возможность использовать профили настроек — с их помощью можно один и тот же проект использовать на локальном хосте и загружать одновременно на производственный сервер. Если профиль определён настройки загружаются в два этапа:
- application/config/*.php
- application/config/PROFILE/*.php — совпадающие настройки перекрывают предыдущие
Профиль задаётся переменной среды LARAVEL_ENV, которую можно определить в Apache директивой SetEnv и прочитать функцией PHPRequest::env
.
При разработке этой переменной принято присваивать значение local, а на производственном сервере — production. Вот как это делается в Apache (задаётся либо в записи виртуального хоста, либо в файле .htaccess в корне Laravel):
confSetEnv LARAVEL_ENV local # Либо: SetEnv LARAVEL_ENV production
Для вёб-сервера nginx есть аналогичная директива: confenv LARAVEL_ENV=local
Если LARAVEL_ENV не определена профили не используются и загружаются только общие настройки (без подпапок).
Настройка
Итак, нам нужно задать основные настройки для нашего приложения. Если вы задали профиль с помощью переменной среды LARAVEL_ENV как было описано выше, то вместо изменения самого файла настроек скопируйте его в подпапку с именем профиля — например, для профиля «local» создайте папку application/config/local и скопируйте туда application/config/application.php и session.php.
Если вы не задавали профиль или хотите, чтобы настройки были применены для всех профилей, то изменяйте основной файл (такой как application/config/application.php).
В начале, при настройке URL, мы уже поменяли одну из них — index в application.php — теперь продолжим в том же файле:
- изменим секретный ключ (key) — по важности для безопасности сервера этот параметр почти не уступает паролю от самого сервера, поэтому позаботьтесь о том, чтобы он не был известен третьим лицам. Это должна быть строка из 32 случайных символов (любых, а не только буквенноцифровых).
- установим язык по умолчанию (language) — изначально это английский (en), мы можем сделать его русским (ru) — но для этого языковые файлы Laravel и установленных пакетов должны быть переведены.
- зададим часовой пояс (timezone) — по умолчанию он установлен в UTC, но если мы хотим отображать московское время, то установим этот параметр в Europe/Moscow.
Также установим драйвер сессии в файле session.php (нам это пригодится в дальнейшем) — установите параметр driver в cookie или file.
Что дальше?
Laravel установлен и готов к работе — вы можете проверить это, перейдя к папку фреймворка (http://localhost/laravel/) — должа появиться страница-приветствие по умолчанию. Если вместо неё у вас появляется ошибка 404 (страница не найдена) — короткие URL не были верно настроены.
Если у вас возникли вопросы можете задать их на нашем форуме.