Loading namespaced classes with Symfony 1.4's autoloader?

亡梦爱人 提交于 2019-12-02 21:09:26

You can use Autoloader from Symfony2 in Symfony 1.4 framework.

1. Copy Symfony2 classloaders to vendor directory of your Symfony 1.4 sandbox project:

SF_ROOT_DIR/lib/vendor/Symfony2/src/Symfony/Component/ClassLoader/UniversalClassLoader.php

SF_ROOT_DIR/lib/vendor/Symfony2/src/Symfony/Component/ClassLoader/ApcUniversalClassLoader.php

2. Modify your SF_ROOT_DIR/config/ProjectConfiguration.class.php file as follows:

require_once dirname(__FILE__) . '/../lib/vendor/symfony/lib/autoload/sfCoreAutoload.class.php';
require_once dirname(__FILE__) . '/../lib/autoload/sfClassLoader.class.php';
sfCoreAutoload::register();

class ProjectConfiguration extends sfProjectConfiguration {

    public function setup() {
        $this->namespacesClassLoader();
        $this->enablePlugins('sfDoctrinePlugin');
    }

    public function namespacesClassLoader() {
       if (extension_loaded('apc')) {
           $loader = new ApcUniversalClassLoader('S2A');
       } else {
           $loader = new UniversalClassLoader();
       }
       $loader->registerNamespaces(array(
          'Pohon' => __DIR__ . '/../lib/vendor/Pohon/src'));
       $loader->register();
    }

}

3. Register desired namespaces:
eg. I want to load class:

Pohon\Tools\String\Utils\Slugify.

Filename must be:

SF_ROOT_DIR/lib/vendor/Pohon/src/Pohon/Tools/String/Utils/Slugify.php

and registered namespace as follows:

Pohon => SF_ROOT_DIR/lib/vendor/Pohon/src

You can use Composer and it's very easy. Just install it on your machine (you probably have already since it's 2015 now) and run in your project folder:

composer init 

You can then install all the packages you want with composer and include just this line in your ProjectConfiguration.class.php:

require_once __DIR__.'/../vendor/autoload.php';

Note that paths may differ if you changed the default Symfony1.4 directory structure.

Symfony uses the spl_autoload_register() function to register its own autoloader (sfAutoload).

You can register your own handler in the initialize() function of your Project/Application/Plugin. (whichever applies).

This is, for example, also what the Swift_Mailer plugin does: it registers its own autoloader when needed.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!