My take on implementing the Repository Design Pattern in PHP
The autoloading problem.
Using composer is probably the easiest way to autoload classes in PHP right now. You'll only have to declare namespaces, use them, and everything will work with only including the autoload file from composer once.
About your repository pattern implementation.
&quot;Repository Interface&quot;
Nope. Not true. You created an EventRepositoryInterface. The point of an interface is to expose an interface that can be shared by classes implementing it, to be able to modify them (or create other implementations) without having to change the code using them in the first place. Are you going to create a new EventRepository class ?
I'm pretty sure you actually wanted a RepositoryInterface that EventRepository will implement (as well as your other repositories).
EventRepository
This class should be able to handle the $data to make Events one by one, thanks to EventMapper.
Right now its only use is to avoid duplicating SQL requests through the code.
It should check the $data, loop over it, do whatever is needed to get a standard data format (such as an array). Then it should loop over this formatted data, pass each iteration to EventMapper and return an array of Events.
EventMapper
As said earlier, this class should only receive data for one Event and return only one aswell. Also, even though you should have sanitized $data beforehand, you still should check it in this class too. To end with a little nitpicking there, toEvent($data) is usually called hydrate($data).