Every time I set up a new Laravel project, I open the
.env file and edit the same variable again and again.
I recently realised I can set my common env variables directly in Valet, so they are automatically injected in all my projects.
One good example is the
DB_PASSWORD variable. I use the
root user locally, but I still set a password as a good practice.
Another example is your log or mailer configuration. Usually, you have a favorite config that you use in all projects, at least in your local dev environment.
I came across this article showing how you can set env variables directly at the root of your project folder in
.valet-env.php. If I understand correctly it’s usefull if your project doesn’t use a
.env file or maybe if you have multiple domains but it’s still per project. That’s not what I’m looking for.
I found that Valet will also load a common file from the
.config folder if no
.valet-env.php exists in your project. That’s what I want!
How to load env variables in Valet
With Macos, create
~/.config/valet/.valet-env.php. It must return a PHP array with your env variables.
1<?php23return [4 '*' => [ // Applies to all env5 'DB_PASSWORD' => 'this_is_my_password',6 ],7];
Every Valet project will have the
DB_PASSWORD automatically loaded. One less thing to add to your
Bonus: Manage it in your
If you manage your .dotfiles in a git repository like I do, make sure you don’t commit this file as it contains a password. It’s a local database password, so it’s not too critical but if you’re going to publish the password, you may as well remove the password of the
A good way to handle this is to create a template in your repository, copy the file and inject the necessary secrets.
1export DB_PASSWORD="my-password"2valet_env_file="$HOME/.config/valet/.valet-env.php"3sed -E "s/PWD_PLACEHOLDER/$DB_PASSWORD/g" "path/to/template/valet-env.php" > "$valet_env_file"