Composer is a great way to manage your PHP dependencies. The documentation is still a bit scarce, so you could imagine that it took a while to find out how to add an external dependency (in my case from github) which doesn’t have a composer.json file and is not registered on packagist. There are different solutions, but Composer seems to be under active development and none worked for me.

So – in my project’s composer.json – this is how I’m loading the FOSFacebookBundle:

  1. Define it as an external repository:
"repositories": {
        "symfony-unofficial": {
            "type": "package",
            "package": {
                "name": "fos/facebookbundle",
                "version": "2.0",
                "source": {
                    "url": "git://github.com/FriendsOfSymfony/FOSFacebookBundle.git",
                    "type": "git",
                    "reference": "origin/2.0"
                }
            }
        }
    }
  1. Add it to your project’s dependencies:
"require": {
        ...
        "fos/facebookbundle":             "2.0.*"
    }
  1. And register the (PSR-0 conform) namespace with the autoloader:
"autoload": {
        "psr-0": {
            "MyBundleNamespace": "src/",
            "FOS": "vendor/"
        }
    }

Et voila! By the way, my composer.json would look like this:

{
    "name": "My app",
    "description": "My Facebook App",
    "repositories": {
        "symfony-unofficial": {
            "type": "package",
            "package": {
                "name": "fos/facebookbundle",
                "version": "2.0",
                "source": {
                    "url": "git://github.com/FriendsOfSymfony/FOSFacebookBundle.git",
                    "type": "git",
                    "reference": "origin/2.0"
                }
            }
        }
    },
    "require": {
        "php":              ">=5.3.2",
        "symfony/symfony":  ">=2.0.10,<2.1.0-dev",
        "doctrine/orm":     ">=2.1.0,<2.2.0-dev",
        "twig/extensions":  "*",

        "symfony/assetic-bundle":         "2.0.*",
        "sensio/generator-bundle":        "2.0.*",
        "sensio/framework-extra-bundle":  "2.0.*",
        "sensio/distribution-bundle":     "2.0.*",
        "jms/security-extra-bundle":      "1.0.*",
        "fos/facebookbundle":             "2.0.*"
    },
    "autoload": {
        "psr-0": {
            "MyBundleNamespace": "src/",
            "FOS": "vendor/"
        }
    }
}