If you work inside a team, do yourself a favor - decide on a coding style and get the entire team to use it. Why Stick To a Standard Co...
If you work inside a team, do yourself a favor - decide on a coding style and get the entire team to use it.
Making all your teammates' code look the same will make the codebase so much easier to review, merge and maintain:
Fortunately, thanks to PHP-FIG, it's easy to choose a standard to start from - PSR-12. Digging a little deeper though, the Laravel ecosystem has pretty much decided on a few rules on top of that. Personally I don't agree with all of them... but... that's normal. Ask 10 developers what they like and... you'll get 10 different answers. So in this case, I found it's better to just... stick to the Laravel standard. You don't like X in particular, your coworker doesn't like Y, and so on, but... you each give in a little bit, for the sake of standardization. Everybody compromises, nobody has a reason to make a fuss... it's the fair way to go, if you ask me. But hey... you do you 😀
There are quite a few ways to do this automatically:
If you can use StyleCI, use that. This is why it exists, and it does an excellent job. When someone pushes code to the repo, StyleCI comes in and formats it, by changing their PR to match the code style. It's simple and brilliant. In fact, we use StyleCI for all the public-source Backpack packages and it's worked wonders. Just follow the prompts to set it up, then you can forget about it.
If your code is open-source, this is such a good option, that you don't need to read any further!
However... if your code is closed-source (not public)... you might find your particular company/setup can't use StyleCI. You might develop A LOT of private projects, that are not under continuous development or maintenance... so you don't want to pay for a maintenance fee for legacy projects... we get it, we got there too. In that case, the StyleCI pricing won't make sense for you. In that case...
Use php-cs-fixer locally, on each developer's computer. There are plug-ins for every major editor and IDE, so it should be easy to do. You can store a configuration file in your project root, to make sure you all enforce the same rules.
However, this does assume you can tell your developers "do this, we all need to use the same code style". In most teams, you can. But even if they do, most developers switch editors, forget to install the plugin, so unstyled code does go through, sometimes. For that reason alone, I don't trust this method alone. So what I prefer is to...
If none of the above float your boat, there's one super-simple solution that you can implement, then forget about. It has most of the benefits of StyleCI (it's implemented where the code is stored, on Github) and most of the benefits of PHP-CS-Fixer (it's free).
You can implement a Github Action. Every time code is pushed or a pull request submitted, you can run php-cs-fixer
on that code and fix whatever is needed. That way, no matter what developers submit, the code will be styled according to the standard.
To be honest, this is the entire reason this article exists - so I get to document how I did this 😀 Hopefully it'll save you some time (and future me too). Here's how to go about it:
Step 1. Create a configuration file for PHP-CS-Fixer (.php-cs-fixer.dist.php
in your root directory). Here's the content we use for it, after digging quite a bit. Note that if you don't have a directory mentioned at the end, you should comment them out, otherwise PHP-CS-Fixer will fail. If you have any comments/improvements on the code style, please suggest them in my gist, it's open for improvements.
Step 2. Add .php-cs-fixer.cache
to your .gitignore
file.
Step 3. Add a PHP-CS-Fixer as a dev requirement: composer require --dev friendsofphp/php-cs-fixer
Step 4. Add a Github action/workflow for it, by creating a .github/workflows/format_php.yml
file:
name: Apply PHP Code Style
on:
push:
branches:
- 'master'
pull_request:
paths:
- '**.php'
jobs:
php-cs-fixer:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
ref: ${{ github.head_ref }}
- name: Install
run: composer install
- name: Run php-cs-fixer
run: ./vendor/bin/php-cs-fixer fix
- uses: stefanzweifel/git-auto-commit-action@v4
with:
commit_message: Apply php-cs-fixer changes
That should be it. Once you push code to your repo, a new commit should automatically be created, fixing the style. This works particularly well if you work with PRs, because then you squash and merge them and you won't bloat up your git history.
I hope this will be helpful to you. If you have a better way of doing this, let me know in the comments. I know there are a lot of ways, but this is what I found to be the best for us, in Sep 2021.
Subscribe to our "Article Digest". We'll send you a list of the new articles, every week, month or quarter - your choice.
What do you think about this?
Wondering what our community has been up to?