2010-07-15 118 views
3

我的设置原则1和B4但似乎现在当我尝试学说2失败需要帮助建立学说2

我已经安装在D:\ResourceLibrary\Frameworks\Doctrine

D:\ResourceLibrary\Frameworks\Doctrine\bin 
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine 
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\Common 
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\DBAL 
D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\ORM 

主义我把D:\ResourceLibrary\Frameworks\Doctrine\binPATH的Windows环境变量 并添加D:\ResourceLibrary\Frameworks\Doctrine在php.ini中include_path

我发现,当我尝试做

D:\>php doctrine.php 
Could not open input file: doctrine.php 

失败...我认为,因为我在PATH Windows环境变量D:\ResourceLibrary\Frameworks\Doctrine\bin,它可以找到doctrine.php

D:\ResourceLibrary\Frameworks\Doctrine\bin>php doctrine.php 

Warning: require(D:\ResourceLibrary\Frameworks\Doctrine\bin/../lib/vendor\Symfony\Components\Console\Helper\HelperSet.ph 
p): failed to open stream: No such file or directory in D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\Common\ClassLoad 
er.php on line 143 

Fatal error: require(): Failed opening required 'D:\ResourceLibrary\Frameworks\Doctrine\bin/../lib/vendor\Symfony\Compon 
ents\Console\Helper\HelperSet.php' (include_path='D:\ResourceLibrary\Frameworks\ZendFramework\library;D:\ResourceLibrary 
\Frameworks\Doctrine;.;c:\php\includes') in D:\ResourceLibrary\Frameworks\Doctrine\Doctrine\Common\ClassLoader.php on li 
ne 143 

然后第二个尝试,通过与错误...

+0

'PATH'只是用来查找命令(在你的情况下是'php'),而不是解析传递给命令的文件名。 – BenV 2010-07-15 13:56:07

回答

3

你不需要整个Symfony框架。只是教义所依靠的那些东西。

如果你下载(目前在BETA2)的ORM组件的current version,它将包括一个名为Symfony文件夹(可能在lib/vendor/Symfony,但它往往四处走动,用新版本)。您需要确保doctrine.phpcli-config.php中的ClassLoader可以找到Symfony文件夹。

$classLoader = new \Doctrine\Common\ClassLoader('Symfony', __DIR__ . '/path/to/Symfony'); 
$classLoader->register(); 

我希望这些信息是准确的。 Doctrine团队不断地调整他们接近最终版本的版本结构。

+0

是的,像这样的伎俩。我需要替换'__DIR__。 '/ path/to/Symfony''改为'D:/ ResourceLibrary/Frameworks/Symfony'同样适用于D'/ ResourceLibrary/Frameworks/Doctrine'。问题是php'include_path'在这里似乎没有做任何事情? – 2010-07-17 02:51:32

+0

如果您使用'require',include_path将帮助加载文件。对于按名称自动加载类,您需要spl_autoloader或类似Doctrine的ClassLoader或Zend_Loader_Autoloader。 – 2010-07-17 03:04:39

+0

我发现我也可以省略'/ path/to/symfony',如果我有'include_path'set – 2010-07-17 04:01:23

0

如果要使用命令行界面的新学说2测试版也已安装的Symfony 2框架(因为它包含了Console Helper)并将其放入包含路径中。

据我所知,目前没有可用的PEAR安装,因此您需要从Symfony 2 website或通过Git下载源代码。

在旁注:看来你也试图在它不存在的路径上执行doctrine.php。这就是为什么你得到了

无法打开输入文件的原因:doctrine.php

错误消息。

+0

好吧,现在如何安装Symfony?我将什么路径添加到我的包含路径?我在我的include_path和'Symfony \ Bundle','Symfony \ Components'和'Symfony \ Framework'文件夹中有'D:\ ResourceLibrary \ Frameworks \ Symfony'。我得到了同样的错误... – 2010-07-16 02:28:31

+0

一个简单的测试版可以将Symfony文件夹放在主PEAR文件夹中。你不必乱用类加载器。如果PEAR在你的系统上正确设置,一切都应该工作。 – 2010-07-16 20:10:59

6

花费几个小时来配置我的机器上学说2经过昨晚,我终于succedded与学说2.

我以这种方式构造学说2工作。

虽然我更喜欢从包管理器下载,但有几种安装Doctrine 2的方法。

首先我下载了​​DoctrineORM-2.0.0BETA3软件包。tgz http://www.doctrine-project.org/projects/orm/download

我提取了测试文件夹里面的tar文件,我测试了我的示例代码。我的文件夹看起来像

./test 
DoctrineORM/ 
DoctrineORM/bin 
DoctrineORM/bin/Doctrine 

然后我在根'模型'和'代理'上创建了2个文件夹。

现在我们需要引导主义。

--- Bootsrap --- 
<?php 
// test.php 

require 'DoctrineORM/Doctrine/Common/ClassLoader.php'; 
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', 'DoctrineORM'); 
$classLoader->register(); // register on SPL autoload stack 

$classloader = new \Doctrine\Common\ClassLoader('model', __DIR__); 
$classloader->register(); 

$config = new \Doctrine\ORM\Configuration(); 
$cache = new \Doctrine\Common\Cache\ArrayCache(); 
$config->setMetadataCacheImpl($cache); 
$config->setQueryCacheImpl($cache); 

$driverImpl = $config->newDefaultAnnotationDriver('model'); 
$config->setMetadataDriverImpl($driverImpl); 
$config->setProxyDir('proxies'); 
$config->setProxyNamespace('proxies'); 

$config->setAutoGenerateProxyClasses(true); 
$config->getAutoGenerateProxyClasses(); 

$connectionOptions = array(
    'driver' => 'pdo_mysql', 
    'dbname' => 'test', 
    'user' => '[DB_User]', 
    'password' => '[DB_Pass]' 
); 

$em = \Doctrine\ORM\EntityManager::create($connectionOptions, $config); 
//echo 'Hello World!' . PHP_EOL; 

// Get result from Table 
$q = $em->createQuery('SELECT c FROM model\User c ORDER BY c.name'); 
$t = $q->getResult(); 
echo "<pre>"; print_r($t); 

// Save a new User to DB 
$uu = new model\User(); 
$uu->name = 'test name1'; 
$uu->age = 4; 
$em->persist($uu); 
$em->flush();  
--- Bootsrap --- 

然后我创建了模型目录模型文件

--- Model - User.php --- 
<?php 
// Model File model/User.php 
namespace Model; 

/** @Entity @Table(name="users") */ 
class User 
{ 
    /** 
    * @Id @Column(type="integer") 
    * @GeneratedValue(strategy="AUTO") 
    */ 
    public  $id; 
    /** @Column(type="string", length=50) */ 
    public  $name; 
    /** @Column(type="integer", length=50) */ 
    public $age; 
} 
--- Model - User.php --- 

我的整个文件夹结构现在看起来像下面。

./test 
DoctrineORM/ 
DoctrineORM/bin 
DoctrineORM/bin/Doctrine 

Model/ 
Model/User.php 
test.php 

希望这会帮助你。如果您需要任何进一步的帮助,我可以向您发送在我的机器上正常工作的完整源代码。

+0

谢谢neeraj,你的帖子真的很有帮助 – 125369 2012-08-08 12:01:38

0

Doctrine v2。*存储在bin目录中。

尝试这样的:

$ vendor/bin/doctrine orm:conver-mapping xml src/ --from-database --force 

不要把PHP上的开始。