2012-08-20 2 views
8

Symfony 1.2 프로젝트를 Symfony 2.x로 포팅했습니다. 현재 최신 2.1.0-dev 릴리스가 실행 중입니다.Symfony 2.1에서 클래스 자동로드

필자는 필자가 낡은 프로젝트에서 문자열로 문자열을 배열하고 문자열에서 슬러그를 생성하는 것과 같은 간단한 기능을 가진 Tools라는 클래스를 사용합니다. 내 새 프로젝트에서이 클래스를 사용하고 싶습니다만이 클래스를 번들 외부에서 사용하는 방법이 확실하지 않습니다.

여기 app/autoload.php를 변경하는 것이 좋습니다.하지만 autoload.php는 답변에있는 것과 다릅니다. 2.0과 2.1 사이에서 변경되었을 수 있습니다.

내 수업을 소스 제어하에있는 내 src 또는 app 디렉토리에 보관하고 싶습니다. 필자의 벤더 디렉토리는 작곡가를 사용하여 작성한 디렉토리가 아닙니다.

여기에 대한 조언을 보내 주시면 감사하겠습니다.

답변

7

이와 같은 간단한 경우에 가장 빠른 해결책은 src 아래에 직접 폴더 (예 : Common)를 만들고 클래스를 넣는 것입니다.

src 
    -- Common 
    -- Tools.php 

Tools.php

는 다음과 같은 src 아래 코드를 삽입하면 use 문을

use Common\Tools; 

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

을 잊지 마세요 함수를 호출하기 전에 예를

<?php 

namespace Common; 

class Tools 
{ 
    public static function slugify($string) 
    { 
     // ... 
    } 
} 

에 대한 적절한 네임 스페이스와 클래스를 포함 위와 같이 적절한 폴더 구조와 네임 스페이스를 사용하면 app/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; 

은 그냥 값으로 YOURNAMESPACE 및 YOURVENDOR 교체 :

+0

굉장 해요, 제 수업은 Lib \ Tools에 넣었고 Symfony는 잘 자동로드했습니다. 건배! –

+0

그것은 나를 위해 작동하지 않습니다. 나는 여기에 이유를 물었다. http://stackoverflow.com/questions/19652384/symfony2-custom-class-not-found. 왜 작동하지 않는지 알고 싶다면 –

12

또 다른 방법은 /app/config/autoload.php을 사용하는 것입니다. 지금까지 나를 위해 꽤 잘 작동합니다.

당신이 맞습니다. 2.0에서 2.1로 자동로드가 변경되었습니다. 위의 코드는 내 프로젝트를 업그레이드 한 최신 버전으로 잘 작동합니다 ;-)

+3

+1 그레이트! 마침내 내가 찾던 것을 발견했다. 이것은 Symfony 문서에 들어 있어야합니다. – Mick

+1

Packagist에 포함되지 않은 사용자 지정 PSR-0 규격 공급 업체 라이브러리를로드하는 올바른 방법입니까? –

+1

아니요, 아닙니다 ... 작성자가 작성한 자동 로더를 통해 자동로드가 수행되므로 공급 업체의 모든 네임 스페이스 클래스를 사용할 수 있어야합니다. – maschmann

관련 문제