2012-02-19 10 views
6

私はZend Frameworkを使ってWebアプリケーションを作成しています。いくつかの推奨事項に基づいて、RDBMシステムとしてDoctrineを選択しました。DoctrineでCLIを使わずに手動でプロキシを生成するには?

;--------------------------------------------------- 
; DOCTRINE CONFIGURATION 
;--------------------------------------------------- 
resources.entityManager.connection.driver = "pdo_mysql" 
resources.entityManager.connection.host = "localhost" 
resources.entityManager.connection.dbname = "private" 
resources.entityManager.connection.user = "private" 
resources.entityManager.connection.password = "private" 
resources.entityManager.connection.entities = APPLICATION_PATH "/models" 
resources.entityManager.connection.proxies.location = APPLICATION_PATH "/models/Proxies" 
resources.entityManager.connection.proxies.ns = "Proxies" 

; According to Doctrine manual, this should be true for 
; development, and false for production 
resources.entityManager.connection.proxies.generate = true 

上記は、Zend application.iniの私のDoctrine設定です。すべて正常に動作していますが、いくつかの理由でCLIを使用せずに手動でプロキシを生成する方法を事前に知りたいと思っていました。まず第一に、Doctrine 2.0の文書では、自動生成プロキシがパフォーマンスの問題を引き起こすと述べています。第二に、私はDoctrine CLIの使い方をまだ分かっていません。特に、プロジェクトの開発をコマンドプロンプトにアクセスすることなく共有サーバーボックスに移動しました。

私は、クラスを作成することによって手動でDoctrineエンティティを生成しています。同様に手動でDoctrineプロキシを手動で生成するにはどうすればよいですか?

$proxyDir = null; //to genearate to default proxy dir 
    $proxyFactory = $em->getProxyFactory(); 
    $metadatas = $em->getMetadataFactory()->getAllMetadata(); 
    $proxyFactory->generateProxyClasses($metadatas, $proxyDir); 

は、エンティティが使用生成する:

答えて

4

私はプロキシを生成するための簡単な方法を見つけた

私たちは、エンティティ、あなたのコード($ metadatasライン)のが第三のラインを持っている
$classes = $em->getClassMetadataFactory()->getAllMetadata(); 
    $generator = new \Doctrine\ORM\Tools\EntityGenerator(); 
    $generator->setGenerateAnnotations(true); 
    $generator->setGenerateStubMethods(true); 
    $generator->setRegenerateEntityIfExists(false); 
    $generator->setUpdateEntityIfExists(true); 
    $generator->generate($classes, '/path/to/generate/entities'); 
+0

Uncaught exception 'Doctrine \ ORM \ Mapping \ MappingException'メッセージで 'ファイルマッピングドライバには有効なディレクトリパスが必要ですが、指定されたパスは正しくないようです!' EntityManagerでプロキシパスを設定する必要があります。ここでは、私の古いプロジェクトのコードです: '$ config = new \ Doctrine \ C:\ Zend \ Apache2 \ htdocs \ Webate \ library \ Doctrine \ ORM \ Mapping \ MappingException.php:193 – Furyvore

+0

ORM \ Configuration; \t \t $ config-> setMetadataCacheImpl(self :: getCache()); \t \t $ config-> setMetadataDriverImpl(new \ qweb \ driver \ DoctrineYml(QWEB_MODULE)); \t \t $ config-> setEntityNamespaces(array( 'base')); \t \t $ config-> setProxyDir(DOCTRINE_PROXIES); \t \t $ config-> setProxyNamespace( 'proxy'); \t \t $接続= \ Doctrine \ DBAL \ DriverManager :: getConnection(self :: loadYml(QWEB_CONFIG.DIRECTORY_SEPARATOR.'databases.yml ')); \t \t $ em = \ Doctrine \ ORM \ EntityManager :: create($ connection、$ config); ' –

関連する問題