TrueBlue TrueBlue - 1 year ago 129
PHP Question

PHP namespace Error. Class not found within composer project

Can someone please point me in the right direction. I have downloaded a GIT project Namshi/JOSE which is a JWT signing and verification library. I have a directory structure shown below.

directory structure

All my unit tests (inside the folder tests work perfectly, so the composer.json and bootstrap.php files are okay. But when I try and add my own test, in the folder myTests->simpleTest.php as below what ever I try I can't get the namespace to resolve the class SimpleJWS. The namespace for the library is Namshi/JOSE. My simple test calling code is:


use Namshi\JOSE\SimpleJWS;
//require_once ("../src/Namshi/JOSE/SimpleJWS.php");

$jws = new SimpleJWS(array(
'alg' => 'RS256'

The error text is:
Fatal error: Class 'Namshi\JOSE\SimpleJWS' not found
. The psr-4 statements are as follows:

"autoload": {
"psr-4": {
"Namshi\\JOSE\\": "src/Namshi/JOSE/"

"autoload-dev": {
"psr-4": {
"Namshi\\JOSE\\Test\\": "tests/Namshi/JOSE/Test/"


Any help would be greatly appreciated.

Answer Source

Your thinking about the autoloading is correct, but as you're stating, your test file lives under "myTests"; your autoload-dev simply points to the wrong directory "tests/Namshi/JOSE/Test/" while your file lies in "myTests".

"autoload-dev": {
    "psr-4": {
         "Namshi\\JOSE\\Test\\": "myTests"

Please also make sure, your FQCN (fully-qualified class name) of your test class is Namshi\JOSE\Test\simpleTest.


namespace Namshi\JOSE\Test;

class simpleTest {}

According to the comments below you were missing the include of the autoloading in your testsuite.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download