CakePHP Plugins Development
Today, CakePHP’s plugin installer has been upgraded and the changes while not minimal should be transparent (or almost) to everyone.
The reason for the changes was explained here - read that.
Now, some people are getting mixed up about the way plugins are now split into different directories
plugins/). That’s because, as described in the PR I linked you to above, they should have
never been in the same directory to start with.
So, how does one now deal with plugins being developed? In
Best practice would suggest to develop plugins in TDD - so no need for an application environment to be running. I will assume that if you’re doing that, then you know what you’re doing :)
Another way is to develop plugins inside a sample (or development) application. In those cases, stick to adding
your plugin to
plugins/ for development (until it’s released on Github at least). The reason
being that the
vendor/ directory isn’t one you track in your repository (it’s auto-generated by composer) and
so changes you make there are not part of your repo (unless you use
Now, with your plugin in
plugins/YourPlugin, it’s time to tell Composer about the namespace it needs to
auto-load for it:
Of course, just append your plugin’s namespace to the already defined ones in your app.
And now tell composer to update the autoloader class:
For the rest, do as you would usually do: load the plugin in bootstrap, etc.
This so far assumed that your plugin was part of your application repository and not a standalone repository. In case you have already pushed the repository to Github (or any other VCS), the workflow is a little different.
First, ignore the namespace changes above and instead, make sure that you plugin is part of your application’s composer dependencies:
Now, add your Github repository to the your application’s
composer.json like so:
composer install. This will install your plugin in
vendor/ and add it’s absolute path to
vendor/cakephp-plugins.php (nothing you should really care about).
As you develop and make changes to your plugin (which is a separate repository in this case), go to
vendor/name/plugin and commit your changes from time to time (push of course).
Once you are done with the development stage of your plugin and have released it to packagist, just delete
the custom repository you have setup for the plugin in your application’s
composer.json and it will
automatically start fetching your plugin from Packagist instead!
That’s it, if you have questions/comments just let me know below.