Skip to content

Laravel - Configuration

All configuration files for the Laravel framework are stored in the config directory. Each option is documented, so feel free to look through the files and familiarize yourself with the options available to you. These files allow you to configure things like your database connection, mail driver, session storage, caching, and much more.

Laravel makes extensive use of environment variables, primarily managed through a .env file in the root of your application. This file allows you to set different configuration values based on the environment your application is running in (e.g., local development, staging, production).

When you install Laravel, a .env.example file is included. You should rename this file to .env or copy its contents into a new .env file. This .env file should not be committed to your application’s source control, as each developer/server may require a different environment configuration.

  • Permissions: After installing Laravel, you may need to configure some permissions. Directories within the storage and the bootstrap/cache directories should be writable by your web server or Laravel will not run. If you’re using a local development environment like Laravel Sail, these permissions are typically handled for you.
  • Application Key: The next thing you should do is set your application key to a random string. If you installed Laravel via Composer or the Laravel installer, this key has likely already been set for you by the php artisan key:generate command. This key is stored in the APP_KEY environment variable in your .env file. It’s used for encryption and hashing, so it’s crucial for security. If it’s not set, your user sessions and other encrypted data will not be secure. You can generate it manually by running:
  • php artisan key:generate
  • The newly generated key will be automatically placed in your .env file.
  • Other Configurations: You should also configure other common settings in your .env file, such as:
    • APP_NAME: The name of your application.
    • APP_ENV: The current environment (e.g., local, production, testing).
    • APP_DEBUG: Toggles debug mode (true for local, false for production).
    • APP_URL: The base URL of your application.
    • DB_CONNECTION, DB_HOST, DB_PORT, DB_DATABASE, DB_USERNAME, DB_PASSWORD: Database connection details.
    • MAIL_MAILER, MAIL_HOST, etc.: Mail driver configuration.

You can easily access your configuration values from anywhere in your application using the global config helper function. Configuration values may be accessed using “dot” syntax, which includes the name of the file and option you wish to access.

// Retrieve the application name from config/app.php
$appName = config('app.name');
// Retrieve the default database connection from config/database.php
$defaultConnection = config('database.default');
// You can also specify a default value if the configuration option doesn't exist
$timezone = config('app.timezone', 'UTC');

Configuration values set in the .env file are loaded by Laravel and can be accessed using the env() helper. However, it’s generally recommended to primarily use the config() helper in your application code. The config files provide default values, and the env() function is used within these config files to load the environment-specific overrides.

Example: Inside config/app.php you might see:

'name' => env('APP_NAME', 'Laravel'),
'env' => env('APP_ENV', 'production'),
'debug' => (bool) env('APP_DEBUG', false),

To give your application a speed boost in production, you should cache all of your configuration files into a single file using the config:cache Artisan command. This combines all of your configuration options into one file which can be loaded quickly by the framework.

php artisan config:cache

After running this command, your .env file will not be loaded during requests. Therefore, you should only run the config:cache command as part of your production deployment process. To clear the configuration cache, run:

php artisan config:clear

By default, your application’s PHP code, particularly within the app directory, resides under the App namespace. This is defined in your composer.json file under the autoload.psr-4 section and is the standard for most Laravel projects. While it’s possible to change this for advanced scenarios (by updating composer.json and running composer dump-autoload), sticking with the default App namespace is recommended for simplicity and consistency.

When updating your application or performing scheduled maintenance, you’ll want to put your application into “maintenance mode”. While in maintenance mode, a customizable maintenance view will be displayed for all requests into your application. Laravel makes this easy with two Artisan commands.

To enable maintenance mode, execute the down Artisan command:

php artisan down

You can also provide message and retry options to the down command. The message value may be used to display a custom message, while the retry value will be set as the Retry-After HTTP header’s value:

php artisan down --message="Upgrading the system, back shortly!" --retry=60

While in maintenance mode, Laravel will display a default maintenance view (typically a 503 status code). You can customize this view by creating a resources/views/errors/503.blade.php file.

Bypassing Maintenance Mode:

You can allow specific IP addresses or use a secret token to bypass maintenance mode. For example, to allow access via a secret path:

php artisan down --secret="my-secret-bypass-token"

Then, you can access the application by navigating to your-app-url/my-secret-bypass-token. A maintenance mode bypass cookie will be issued to your browser.

To disable maintenance mode and bring your application back online, use the up Artisan command:

php artisan up

After executing this command, your application will be available to users again.

For more detailed configuration options, including database, logging, and cache settings, always refer to the relevant sections in the official Laravel documentation.