Automate code formatting in your Laravel project

Code style is important. Use this setup to automate it in your laravel project.
Ahmet Özışık · Founder · 08 Jun, 2021

This setup helps you even when team members don't use the same IDE. Now updated for Husky v6!

1. Install the dependencies

Let's pull in php-cs-fixer, husky and lint-staged to set this up.

composer require friendsofphp/php-cs-fixer --dev
npm i -D husky lint-staged

2. Create .php_cs in your project root

This file determines how to actually format your code. Here's a template for Laravel to get you started: Swiftmade's php-cs-fixer config for Laravel.

Also, don't forget to add .php_cs.cache to your gitignore file.

3. Set up husky & lint-staged to run php-cs-fixer

Husky allows us to execute commands before git commit runs, so that even if you forget to format your PHP files, they'll be formatted before the changes are committed. We'll create a git hook using husky, which will run lint-staged.

# Install husky
npm i -D husky

# Enable Git hooks
npx husky install

# To create Git hooks after install
npm set-script prepare "husky install"

# Add lint-staged as a pre-commit command
npx husky add .husky/pre-commit "npx lint-staged"

Lint-staged will grab the php files in the active changelist and pass them to php-cs-fixer. To achieve that, add this to your package.json:

"lint-staged": {
    "*.php": "php ./vendor/bin/php-cs-fixer fix --config .php_cs"
},

Wrap Up

In 3 simple steps, we've automated code styling. Automating code formatting in this way can be so much more productive as it lessens the burden of configuring each developer's machine individually. Plus, because you share your style file (.php_cs in this case) with the project, it's quite easy change your code-style and enforce those changes across your team instantly.

As a bonus, you can throw in .vue and .js into your lint-staged config and format them using a tool like prettier. Happy coding!

More From Swiftmade

Nov 22
Labkar Case Study
Mar 5
Blogdown v2 Released
Apr 10
Passing user input to orderBy is recipe for SQL injection