In a previous article, I talked about reusing and exporting code. This article is more practical, and it’s about implementing that with PHP.
In the PHP world, composer is the de-factor tool to put together, solve dependencies and autoload external libraries (the tons you can find on github) or your own repos (that means everything non-application-specific that you can export and it’s not already decently implemented by anyone else).
Export your libraries into a public github repo
Say you locate some code that is non-application-specific and you want to export it into another public repository. To do that, create a new Github repo, using this skeleton for example, and add there your libraries, tests and composer.json with autoload information. Commit and push.
Use your new library on your main project
On your main project, add the require for your repo, and specify source as a preferred install. See the example below.
You can now run
composer update your-github-username/your-repo
And have your repository autoloaded into your main one.
Make changes to your repo
You can make changes your your imported repository with your IDE directly inside the vendor/your-github-username/your-repo directory.
If you want to commit a change, bash into the vendor directory, commit and push the change.
Before you commit changes (that use the modified version of your imported repo) on your main project, remember to run
so that the composer.lock file will now point at the new version.
Point to a specific commit hash
If you want to point your main repo at a specific commit of your imported repo, get the commit hash (git log), then in your composer file use
If you want to make changes to an existing github repository that is not yours
If you need to use your fork instead an official repo, please refer to another article on this blog about using your own forks with composer. Making changes will be the same as described above. If you need to pull changes from the original repository, just add the remote origin (git remote add upstream <originalRepoUrl)). Refer to git remote operations for that.