Unlike other answers, I can say that there is an agreement that should fully use the names of qualified classes for service names everywhere is possible (and fake class names where the service is virtual and an instance of another class).
If the problem is how ZfcUser , I can tell you that ZfcUser not up-to-date (currently 0.1.* ) And needs to be rewritten. You can look at BjyAuthorize for a better example.
I use either the FQCN (Fully Qualified Class Name) of the class that is defined as the service, or the FQCN of the interface that it implements, which helps to avoid the fact that the user using the service uses an API not specified in the interface, and only in the implementation class.
Also note that it does not matter if you use the names \ or _ or lowercase or uppercase names, since everything is normalized to the service manager . This means that zfcuser_service_user or ZfcUser\Service\User match.
To repeat, here's a good practice:
'invokables' => array(
It is easy to remember and allows end users of your service to search for Namespace\MyInterface and find what they were looking for.
Use it also for factories and services derived from abstract classes, if possible, as this makes it easier for everyone to remember.
source share