| This project is no longer maintained and has been archived.

master

# Extensions

The Doctrine extensions are a way to create reusable Doctrine extensions that can be dropped into any project and enabled. An extension is nothing more than some code that follows the Doctrine standards for code naming, autoloading, etc.

In order to use the extensions you must first configure Doctrine to know the path to where your extensions live:

    Doctrine_Core::setExtensionsPath( '/path/to/extensions' );

Lets checkout an existing extension from SVN to have a look at it. We'll have a look at the `Sortable` extension which bundles a behavior for your models which give you up and down sorting capabilities.

    $ svn co http://svn.doctrine-project.org/extensions/Sortable/branches/1.2-1.0/ /path/to/extensions/Sortable

If you have a look at `/path/to/extensions/Sortable` you will see a directory structure that looks like the following:

    Sortable/
      lib/
        Doctrine/
          Template/
            Listener/
              Sortable.php
              Sortable.php
      tests/
        run.php
        Template/
          SortableTestCase.php

To test that the extension will run on your machine you can run the test suite for the extension. All you need to do is set the `DOCTRINE_DIR` environment variable.

    $ export DOCTRINE_DIR=/path/to/doctrine

| The above path to Doctrine must be the path to the main folder, not just the lib folder. In order to run the tests it must have access to the `tests` directory included with Doctrine.

It is possible now to run the tests for the `Sortable` extension:

    $ cd /path/to/extensions/Sortable/tests$ php run.php

You should see the tests output the following showing the tests were successful:

    Doctrine Unit Tests
    ===================
    Doctrine_Template_Sortable_TestCase.............................................passed

    Tested: 1 test cases.
    Successes: 26 passes.
    Failures: 0 fails.
    Number of new Failures: 0
    Number of fixed Failures: 0

    Tests ran in 1 seconds and used 13024.9414062 KB of memory

Now if you want to use the extension in your project you will need register the extension with Doctrine and setup the extension autoloading mechanism.

First lets setup the extension autoloading.

    // bootstrap.php

    // ...
    spl_autoload_register( array( 'Doctrine', 'extensionsAutoload' ) );

Now you can register the extension and the classes inside that extension will be autoloaded.

    $manager->registerExtension( 'Sortable' );

| If you need to register an extension from a different location you can specify the full path to the extension directory as the second argument to the `registerExtension()` method.