我正在开发一个应用程序,该应用程序使用从服务调用的生成器命令,在Web窗体中的用户配置输入时生成实体。
我在dropDown中使用常规的Doctrine Types,[boolean,integer,string,text,...]来允许字段类型配置。加上自定义Type" ValueList"用于为最终用户提供选项,可以在生成的表单中的DropDown框中为生成的实体选择。
在开发中它运作顺利。但是在prod,任何新生成的实体,使用" ValueList"字段,将此字段呈现为输入文本,而不是按预期方式选择。
如果我手动rm app/cache/prod/annotations/*
,则可以在刷新时使用。
我通过创建一个注释@ValueList来实现这一点,该注释被添加到刚刚生成的实体的propper Field中。对于DoctrineOrmTypeGuesser猜测为'文本的任何字段,class FormTypeGuesser extends DoctrineOrmTypeGuesser
为{&#39}。字段我检查@ValueList注释。
那么,有没有办法告诉Annotations Parser找到任何新的变化?
答案 0 :(得分:1)
您可以覆盖annotations.file_cache_reader
定义并提供扩展基类FileCacheReader
的自己的缓存服务。
然后,您只需在服务中实现一个强制为特定实体类生成缓存的方法。
您可以在annotations.file_cache_reader
symfony/src/Symfony/Bundle/FrameworkBundle/Resources/config/annotations.xml
的定义
有关服务覆盖here的更多信息。
答案 1 :(得分:0)
在读取我自己的代码到过去的片段时,我意识到我正在使用Symfony annotation_reader服务,实际上是FileCacheReader
类,除非使用debug参数初始化为true,否则不会跟踪更改在课堂里。
因为我不能(我认为)[编辑:我可以按照@rolebi的说法]覆盖Symfony如何实例化这个服务,我不想创建一个基本的AnnotationReader并向其注册Annotations。我决定'手动'删除相关的缓存文件。
public function clearAnnotationsCache(DocumentType $docDefinition)
{
// /home/juanmf/Work/GDocs/docdigital1/app/cache/[prod|dev]
$envCacheDir = $this->_kernel->getCacheDir();
$files = glob(sprintf( '%s/annotations/%s*', $envCacheDir, sha1($docDefinition->getClassFqcn())));
foreach ($files as $file) {
if (is_file($file)) {
unlink($file);
}
}
}
sha1($docDefinition->getClassFqcn()))
与FileCacheReader命名缓存类的方式相匹配。 FQCN如'DocDigital\Bundle\UserBundle\Entity\User'
这样我只删除了最少量的缓存元素。