2011-04-04 22 views
0

我在codeigniter中使用doctrine2(2.0.3),並且我注意到當我添加,更改甚至刪除一些被作爲生命週期插入的方法時,只是忽略了變化。例如,我添加doctrine 2阻止方法(或類似問題)的LifecycleCallbacks緩存

/* 
* @PostLoad 
*/ 
private function setUpObj() { 
    echo('in'); 
} 

爲此@HasLifecycleCallbacks,功能有時也被稱爲在餐後的模型(實體),有時它被忽略,有時它接受一個變化,則忽略任何其他變化...

在引導文件,我使用了一些配置選項,這裏是他們的樣品,如果有更多需要我會更新我的職務

$cache = new \Doctrine\Common\Cache\ArrayCache; 
$config->setMetadataCacheImpl($cache); 
$config->setQueryCacheImpl($cache); 
// Set up driver 
$Doctrine_AnnotationReader = new \Doctrine\Common\Annotations\AnnotationReader($cache); 
$Doctrine_AnnotationReader->setDefaultAnnotationNamespace('Doctrine\ORM\Mapping\\'); 
$driver = new \Doctrine\ORM\Mapping\Driver\AnnotationDriver($Doctrine_AnnotationReader, APPPATH.'models'); 
$config->setMetadataDriverImpl($driver); 

// Proxy configuration 
$config->setProxyDir(APPPATH.'/models/proxies'); 
$config->setProxyNamespace('Proxies'); 

    $config->setAutoGenerateProxyClasses(TRUE); 

一段時間後(通常當我放棄了改變方法,採取走路回來),它開始正常工作,它接受我的最後的改變,然後我通常會創建我的意圖並停止改變這種方法。 我的服務器是win7上的標準/默認xampp,我從未注意過任何類似於任何其他php文件的情況。這不僅僅與@PostLoad有關,它也發生在@PrePersist和@PreUpdate以及

這是正常行爲,還是我錯過了什麼?

由於提前, DALIBOR

回答

0

看來,符號和註釋必須是這樣

/** 
* @PostLoad 
*/ 
function setUpObj() { 
    $this->mainObjName = 'models\Page'; 
    $this->defaultSortingField = 'ordering'; 
} 

含義,第一個註釋行必須以/ **(二星級)啓動和功能不能私人的。或者至少這是它如何爲我工作,希望它可以幫助別人

+0

是的,你需要使用正確的DocBlocks/**和功能必須是公開的(否則它不能在課堂外調用)。 – Cobby 2011-04-06 12:20:55