Code
Before working on patches for CakePHP, it’s a good idea to get your environmentsetup. You’ll need the following software:
- Git
- PHP 7.2.0 or greater
- PHPUnit 5.7.0 or greater
Set up your user information with your name/handle and working email address:
Note
If you are new to Git, we highly recommend you to read the excellent andfree ProGit book.
Get a clone of the CakePHP source code from GitHub:
- If you don’t have a account, create one.
After your fork is made, clone your fork to your local machine:
- git clone git@github.com:YOURNAME/cakephp.git
Now that you have CakePHP setup you should be able to define a database connection, and.
Each time you want to work on a bug, feature or enhancement create a topicbranch.
The branch you create should be based on the version that your fix/enhancementis for. For example if you are fixing a bug in 3.x
you would want to use themaster
branch as the base for your branch. If your change is a bug fix forthe 2.x release series, you should use the branch:
- # fixing a bug on 3.x
- git fetch upstream
- git checkout -b ticket-1234 upstream/master
- # fixing a bug on 2.x
- git fetch upstream
- git checkout -b ticket-1234 upstream/2.x
Tip
Use a descriptive name for your branch, referencing the ticket or featurename is a good convention. e.g. ticket-1234, feature-awesome
The above will create a local branch based on the upstream (CakePHP) 2.x branch.Work on your fix, and make as many commits as you need; but keep in mind thefollowing:
- Add a test case to show the bug is fixed, or that the new feature works.
- Keep your commits logical, and write clear commit messages that providecontext on what you changed and why.
This will fetch + merge in any changes that have happened in CakePHP since youstarted. It will then rebase - or replay your changes on top of the currentcode. You might encounter a conflict during the rebase
. If the rebase quitsearly you can see which files are conflicted/un-merged with git status
.Resolve each conflict, and then continue the rebase:
- git add <filename> # do this for each conflicted file.
- git rebase --continue
Check that all your tests continue to pass. Then push your branch to your fork:
If you’ve rebased after pushing your branch, you’ll need to use force push:
- git push --force origin <branch-name>
Once your branch is on GitHub, you can submit a pull request on GitHub.
When making pull requests you should make sure you select the correct basebranch, as you cannot edit it once the pull request is created.
- If your change is a bugfix and doesn’t introduce new functionality andonly corrects existing behavior that is present in the current release. Thenchoose master as your merge target.
- If your change is a new feature or an addition to the framework, then youshould choose the branch with the next version number. For example if thecurrent stable release is , the branch accepting new features willbe
4.next
. - If your change is a breaks existing functionality, or API’s then you’ll haveto choose then next major release. For example, if the current release is
4.0.0
then the next time existing behavior can be broken will be in so you should target that branch.
Note
All bug fixes merged into a maintenance branch will also be merged into upcomingreleases periodically by the core team.