Autoloading a class in Symfony 2.1

前端 未结 2 974
囚心锁ツ
囚心锁ツ 2020-12-11 17:37

I\'m porting a Symfony 1.2 project to Symfony 2.x. I\'m currently running the latest 2.1.0-dev release.

From my old project I have a class called Tools which has som

相关标签:
2条回答
  • 2020-12-11 18:28

    For a simple case like this the quickest solution is creating a folder (for example Common) directly under src and put your class in it.

    src
      -- Common
        -- Tools.php
    

    Tools.php contains your class with proper namespace, for example

    <?php
    
    namespace Common;
    
    class Tools
    {
        public static function slugify($string)
        {
            // ...
        }
    }
    

    Before calling your function do not forget the use statement

    use Common\Tools;
    
    // ...
    Tools::slugify('my test string');
    

    If you put your code under src following the proper folder structure and namespace as above, it will work without touching app/autoload.php.

    0 讨论(0)
  • 2020-12-11 18:28

    Another way is to use the /app/config/autoload.php:

    <?php
    
    use Doctrine\Common\Annotations\AnnotationRegistry;
    
    $loader = require __DIR__.'/../vendor/autoload.php';
    $loader->add( 'YOURNAMESPACE', __DIR__.'/../vendor/YOURVENDOR/src' );
    
    
    // intl
    if (!function_exists('intl_get_error_code')) {
        require_once  _DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs/functions.php';
    
        $loader->add('', __DIR__.'/../vendor/symfony/symfony/src/Symfony/Component/Locale/Resources/stubs');
    }
    
    AnnotationRegistry::registerLoader(array($loader, 'loadClass'));
    
    return $loader;
    

    Just replace YOURNAMESPACE and YOURVENDOR with your values. Works quite well for me, so far.

    You're correct, I stumbled upon the changes in autoload from 2.0 to 2.1. The above code works fine with the latest version, to which I upgraded my project ;-)

    0 讨论(0)
提交回复
热议问题