Handling Incoming Webhooks in PHP

An increasing number of applications now offer webhooks as an integration, often in addition to an API. The classic example, familiar to most developers, is the GitHub webhooks which can notify your other systems such as CI tooling that a new commit has been added to a branch. If you imagine how many repositories exist on GitHub, and how many other systems react to changes on each repository … there’s a reason they are excellent with webhooks! Whether it’s your source control, updates from your IoT sensors, or an event coming from another component in your application, I have some Opinions (TM) about handling webhooks, so I thought I’d write them down and include some code as well, since I think this is an area that many applications will need to work with. Continue reading

Joind.In Needs Help

This post is about the open source project, Joind.in. Joind.in is a tool to allow attendees at conferences or other events to offer immediate public feedback to speakers and organisers at those events. Joind.in is an open source project run by volunteers. For the last 6 years I’ve been a maintainer of this project, following a year or two of being a contributor. Over the last few months, myself and my comaintainer Rob Allen have been mostly inactive due to other commitments, and we have agreed it’s time to step aside and let others take up the baton. Continue reading
Posted in php

Connect to RabbitMQ from PHP over AMQPS

I work a lot with data these days and queues are a common addition to my applications to move data between applications. At the moment I’m working with RabbitMQ (and loving it!) but I wanted to deploy to a hosted RabbitMQ service and struggled to find examples of doing this over SSL so I thought I’d share what worked for me. Disclaimer: I work for IBM and they own Compose.com, which means I have a “do anything you like!” account there :) Continue reading

Find Mongo Document By ID Using The PHP Library

My new job as a Developer Advocate with IBM means I get to play with databases for a living (this is the most awesome thing ever invented, seriously). On my travels, I spent some time with MongoDB which is a document database – but I ran into an issue with fetching a record by ID so here’s the code I eventually arrived at, so I can refer to it later and if anyone else needs it hopefully they will find it too. Continue reading

Simple Access Control for CakePHP3

The newest version of CakePHP doesn’t ship with built in ACL, which means you need to write your own. Personally I think this is a smart move, having looked at the one-size-fits-all solutions for previous versions of the framework and knowing that every system has different requirements, this version has good hooks and documentation on how to add something that works for your application. I thought I’d share what worked for mine. Continue reading

Change Form Input Type in CakePHP3

I’ve been having my first experiences with generated code, generating a new admin backend using CakePHP3 (yes CakePHP is still around, it’s alive and doing rather well in fact!). So far it’s going great and producing a much more complete solution than I’d have managed for myself on this timescale.

One thing is bothering me though: it guesses form input types from the database column types, which mostly works well but sometimes it picks something that doesn’t reflect the way that the user will store information in this field. It’s actually pretty easy to change the forms that get generated though, so here’s an example. Continue reading

PHP 7.0 (and 5.6) on Ubuntu

PHP 7 is released but for those of us who don’t usually compile our own PHP, it can be a long wait for our preferred distro to release the packages we want. For Ubuntu, I’m using a PPA which allows both PHP 5.6 and PHP 7.0 to be installed, including things like extensions, at the same time. It was very easy to set up (I’m running Ubuntu 15.10 but this process should also work on older versions back to at least 14.04 which is the previous LTS) so here’s a quick walkthrough of what I did. Continue reading

Handling Composer “lock file out of date” Warning

Composer is dependency management for PHP, and it consists of two main files:

  • composer.json where you specify your dependencies
  • composer.lock where composer itself records exactly which precise version of every library and every dependency of every library it picked, so all installs will be identical

Crucially, the composer.lock also includes a hash of the current composer.json when it updates, so you can always tell if you’ve added a requirement to the composer.json file and forgotten to install it. Continue reading

PHP Web Services: 2nd Edition


I’m delighted to announce that the second edition of PHP Web Services is published! This isn’t an entirely new book but in my own biased opinion it is a much better job of this topic than I did the first time around :) Following from the feedback we got on the first book, this edition contains quite a lot more working examples (with code on github) as well as updates for new tools and expansion on newer technologies and practices.

Writing a second edition was nothing like writing a first edition, it’s more like editing with snippets of writing and rewriting thrown in. My heartiest thanks to my tech reviewers who sorted out all kinds of nonsense contradictions and generally asked hard questions during the process – you are all humans of the highest calibre :)