2013-05-27 56 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 = 

The 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

這是一個經典的自動加載問題...正確地註冊您的名稱空間與自動加載器。

確保您已註冊模型\ OM與它的,如果它使用比其他命名一個不同路徑磁帶自動加載真實路徑。

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

如果這不是你可能有一個丟失/錯誤在\編譯\類\型號\用戶使用語句的解決方案......

...或者你正在試圖構建一個inexistant這樣的班級。

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

...當它應該不是讀

$baseuser = new \model\om\BaseUser; 

...或更好

use model\om\BaseUser; 

// ... 

$baseUser = new BaseUser(); 

...或者你BaseUser類違犯了以某種方式PSR命名約定。