Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Where to register autoload when the vendor is not managed with composer in Symfony 2.1?

I'm using symfony 2.1 and I want to add a library to vendors. The library do not exists in packagist. I can't manage it with composer. When I install bundles or others vendors through composer, it manage autoload for me. But where to register autoload when the vendor is not managed with composer?

like image 642
smoreno Avatar asked Jul 15 '12 22:07

smoreno


3 Answers

You can add libraries to composer that are not in packagist. You must add them in the repositories array of your composer.json file.

Here's how to load a github repository that has a composer.json file, even though it's not on packagist (for example a fork you would have done to fix a repository) : http://getcomposer.org/doc/02-libraries.md#publishing-to-a-vcs

And here's how to load a library that's on a git/svn repository, or a zip file : http://getcomposer.org/doc/05-repositories.md#types

An example using various possibilities:

{
  "repositories": [
    {
      "type": "vcs",
      "url": "http://github.com/igorw/monolog"
    },
    {
      "type": "package",
      "package": {
        "name": "smarty/smarty",
        "version": "3.1.7",
        "dist": {
          "url": "http://www.smarty.net/files/Smarty-3.1.7.zip",
          "type": "zip"
        },
        "source": {
          "url": "http://smarty-php.googlecode.com/svn/",
          "type": "svn",
          "reference": "tags/Smarty_3_1_7/distribution/"
        },
        "autoload": {
          "classmap": [
            "libs/"
          ]
        }
      }
    }
  ],
  "require": {
    "monolog/monolog": "dev-bugfix",
    "smarty/smarty": "3.1.*"
  }
}
like image 105
AdrienBrault Avatar answered Oct 30 '22 03:10

AdrienBrault


You should be able to use Composer for registering vendor libraries not available via packagist. I'm not entirely sure, but this should work fine:

{
    "autoload": {
        "psr-0": {
            "Acme": "src/",
            "MyVendorLib": "vendor/my-vendor/src",
            "AnotherLib": "vendor/another-vendor/lib"
        }
    }
}
like image 8
kgilden Avatar answered Oct 30 '22 03:10

kgilden


You just need to modify your composer.json file for the autoload value:

http://getcomposer.org/doc/04-schema.md#autoload

//composer.json in your symfony 2.1 project
"autoload": {
     "psr-0": { 
         "": "src/", 
         "YourLibrary": "src/location/of/lib"
     }
},

And then in your controller for example:


namespace Acme\UserBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use YourLibrary\FolderName\ClassName;

class DefaultController extends Controller {

/**
 * @Route("/")
 * @Template()
 */
public function indexAction()
{
   $lib = new ClassName();
   $lib->getName();

   return array('name' => $name);
}

}

like image 3
Nick Avatar answered Oct 30 '22 01:10

Nick