Silex $app['autoloader']->registerNamespace() deprecated

The past few days I’ve been playing around with Silex, a micro PHP Framework. At a certain point I got stuck in the process when using a custom controller: the darn class just wouldn’t load and the (otherwise excellent) documentation on the Silex site has not mention on how to load it.

Most of the information one finds on the internet instruct you to do this (line #3):

// source for /app/bootstrap.php
require_once __DIR__ . '/../vendor/autoload.php';
$app = new Silex\Application();
$app['autoloader']->registerNamespace('Bramus', __DIR__. '/src');

That information however, is deprecated and won’t work.

A working solution I eventually found was this one:

// source for /app/bootstrap.php
$loader = require_once __DIR__ . '/../vendor/autoload.php';
$app = new Silex\Application();
$loader->add('Bramus', __DIR__. '/../src');

But that code just stinks I must say, it just doesn’t feel right.

Turns out the nicest solution is the most simple one: just register your custom namespace in composer.json. For example:

{
	"require": {
		"silex/silex": "1.0.*@dev"
	},
	"autoload": {
		"psr-0": {
			"Bramus": "src/"
		}
	}
}

After changing it, run a composer update and you’re good to go.

Hope this helped you, struggled with it myself quite some time.

Elsewhere , , ,

One Response to Silex $app['autoloader']->registerNamespace() deprecated

  1. danielrvt says:

    How would I use the recently loaded class as a controller function?

    The silex docs states tha one could ‘Blah::get’ but I always get Class “Blah” does not exist.

Comments are closed.