2013-05-27 2 views
1

현재 Propel 1.6 및 Symfony 2 오토로더 클래스를 사용하고 있습니다.Propel & Sympfony 2 오토로더

내 문제는 내가 첫 번째 클래스에 액세스 만 할 수 있다는 것입니다 그것을 어떻게 든 나던 액세스 다른 클래스 오류 :

Fatal error: Class 'model\om\BaseUser' not found in C:\xampp\htdocs\gym\build\classes\model\User.php on line 20 

는 XML이

<?xml version="1.0" encoding="utf-8"?> 
<database name="gym" namespace="model" defaultIdMethod="native"> 

build.properties

# Database driver 
propel.database = mysql 

# Project name 
propel.project = gym 
propel.namespace.autoPackage = true 
propel.database.url = mysql:host=localhost;dbname=test 
propel.database.user = root 
propel.database.password = 

PHP

// Include the main Propel script 
require_once '/propel/Propel.php'; 
// Initialize Propel with the runtime configuration 
//Propel::init("/build/conf/gym-conf.php"); 

require_once realpath(dirname(__FILE__)) . "/ClassLoader/UniversalClassLoader.php"; 
use Symfony\Component\ClassLoader\UniversalClassLoader; 

$loader = new UniversalClassLoader(); 

$loader->registerNamespaces(array ( 
            "build\classes\model" => realpath(dirname(__FILE__) ), 
            "Symfony\Component" => realpath(dirname(__FILE__)), 
            "s" => __DIR__ 
         )); 


$loader->register(); 

use \build\classes\model\User; 
$a = new User; 

답변

2

이것은 고전적인 자동 로딩 문제입니다 ... 자동 로더로 네임 스페이스를 올바르게 등록하십시오. 그것은 다른 네임 스페이스보다 다른 경로를 사용하는 경우

당신이 그것으로 모델 \ 톰 등록했는지 확인하여 자동 로더의 실제 경로입니다.

$loader->registerNamespaces(array ( 
    // ... namespaces here 
    "model\om" => 'path_here', 
)); 

즉 당신이 당신의 \ 빌드 \ 클래스 \ 모델 \ 사용자의 누락/잘못 사용 문이있을 수 있습니다 솔루션이 아니라면 ...

... 또는 당신은 inexistant을 구성하기 위해 노력하고있다 이런 식으로. 대신

$baseuser = new \model\om\BaseUser; 

... 또는 더 나은

use model\om\BaseUser; 

// ... 

$baseUser = new BaseUser(); 

... 또는 BaseUser 클래스를 읽어야

// this tries to load BaseUser build\classes\model\model\om\BaseUser 
// ... if used in User.php 
$baseUser = new model\om\BaseUser; 

... 어떤 식 으로든 PSR 명명 규칙을 위반 .