Настройки и перевод интерфейса
Адрес базы данных, ключи платёжной системы, язык интерфейса на вашем компьютере и на сервере разные. Laravel отделяет такие значения от кода: секреты лежат в .env, настройки — в папке config, тексты интерфейса — в файлах перевода.
Файл .env
.env хранит значения, которые отличаются между окружениями. В репозиторий он не попадает:
APP_NAME="Мой блог"
APP_ENV=local
APP_DEBUG=true
STRIPE_SECRET=sk_test_123Файлы настроек
В коде значения из .env напрямую не читают. Их подключают в файлах папки config функцией env():
// config/services.php
return [
'stripe' => [
'secret' => env('STRIPE_SECRET'),
'currency' => env('STRIPE_CURRENCY', 'rub'),
],
];Второй аргумент env() — значение по умолчанию.
Чтение настроек
Везде в приложении настройки читают функцией config(). Путь к значению записывают через точку: имя файла, затем ключи:
$secret = config('services.stripe.secret');
$name = config('app.name');
$timezone = config('app.timezone', 'UTC');Свои настройки
Достаточно создать файл в папке config:
// config/blog.php
return [
'posts_per_page' => 15,
'allow_comments' => env('BLOG_COMMENTS', true),
];$posts = Post::latest()->paginate(config('blog.posts_per_page'));Окружение
if (app()->environment('production')) {
// только на рабочем сервере
}
if (app()->isLocal()) {
// только при разработке
}Файлы перевода
Тексты интерфейса хранят в папке lang. Её создаёт команда:
php artisan lang:publishДля каждого языка — своя папка с файлами-массивами:
// lang/ru/messages.php
return [
'welcome' => 'Добро пожаловать, :name!',
'posts' => '{0} Нет статей|{1} :count статья|[2,4] :count статьи|[5,*] :count статей',
];Вывод перевода
Функция __() возвращает текст на текущем языке. Значения подставляются на место слов с двоеточием:
<h1>{{ __('messages.welcome', ['name' => $user->name]) }}</h1>
<p>{{ trans_choice('messages.posts', $count, ['count' => $count]) }}</p>trans_choice() выбирает форму слова по числу.
Переключение языка
Язык по умолчанию задаёт APP_LOCALE в .env. Для конкретного запроса его меняют в посреднике:
use Illuminate\Support\Facades\App;
public function handle(Request $request, Closure $next)
{
App::setLocale($request->segment(1) === 'en' ? 'en' : 'ru');
return $next($request);
}Частая ошибка
После команды php artisan config:cache функция env() вне папки config возвращает null: файл .env больше не читается. Поэтому в контроллерах, моделях и шаблонах используйте только config(), а env() — исключительно в файлах настроек.