问题标签 [doctrine-phpcr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
symfony - Symfony 下的 Doctrine PHPCR-ODM 未检测到映射的文档类
我正在尝试将 PHPCR-ODM 与现有的 Symfony 项目集成,并且无法让它(大概)检测我映射的 Document 类。具体来说,当我尝试持久化我的 MyDocument 类的 Document 时,会出现这样的错误:
我的类位于一个可能很奇怪的命名空间中,因为该项目也使用 Doctrine ORM,到目前为止,我刚刚为映射文档添加了一个新空间,但我无法想象命名空间名称的选择会影响功能。
根据文档,我已添加到我的 app/autoload.php:
我的 app/config/config.yml 包括以下内容(参数在 parameters.yml 中设置):
我的文档类位于 src/Example/Common/ORM/Document/MyDocument.php 中,如下所示:
最后,我用来测试集成的代码位于一个简单的控制台命令中,如下所示:
我已经验证我的 MyDocument 类已正确加载,但似乎没有以使 DocumentManager 意识到它是映射的 Document 类的方式处理注释。
我的猜测是我忽略了一些简单的配置步骤,但是通过反复彻底地查看 PHPCR、PHPPCR-ODM 甚至 Symfony CMF 的文档,我似乎找不到任何东西。那里的大多数示例都涉及通过 Symfony CMF 使用 PHPCR,我无法找到许多(任何?)PHPPCR-ODM 被集成到常规 Symfony 项目中的真实示例。
编辑:最终解决方案
我遵循了@WouterJ 在下面给出的建议,它解决了我的问题,我进一步遵循了他的建议,将编译器传递添加到我的 Symfony 包中,以使其使用非标准命名空间(即,除YourBundle\Document
. 就我而言,这将进入一个库,该库将在其他地方而不是捆绑包中重复使用,因此它是合适的。
为此,我在src/Example/Bundle/ExampleBundle/ExampleBundle.php
文件中添加了一个方法,如下所示:
该代码允许将任何映射的文档类放置在 Example\Common\ODM\Document 命名空间中,并且它将拾取它们。此示例使用注释,但相同的模式可用于 XML 或 YAML 映射(请参阅Doctrine\Bundle\PHPCRBundle\DependencyInjection\Compiler\DoctrinePhpcrMappingsPass
方法签名的类)。
我发现我还需要定义doctrine_phpcr.odm.metadata.annotation_reader
服务以使其工作,我在app/config.yml
:
可能有更好的方法来做到这一点,但这足以让它对我有用。
php - Symfony CMF 数据库模式
我已经开始研究 Symfony CMF,我必须说它看起来不错!但是,我无法理解数据库架构!我已经阅读了 PHPCR 的基础知识,并在一定程度上理解了它。让我感到困惑的是 Symfony CMF 安装的所有额外表。IE
- phpcr_binarydata
- phpcr_internal_index_types
- phpcr_namespaces
- phpcr_nodes
- phpcr_nodes_references
- phpcr_nodes_weakreferences
- phpcr_type_childs
- phpcr_type_nodes
- phpcr_type_props
- phpcr_workspaces
这些都是干什么用的?我能理解的唯一表是 phpcr_nodes 和存储的 XML / 属性数据!有些表有数据并且正在被查询 - 但我在 phpcr_nodes 中看不到对它们的任何引用!
例如:
表“phpcr_type_nodes”有数据如
名称:phpcr:托管超类型:nt:base
表“phpcr_type_props”有数据如
名称:版权
php - CreateBundle Symfony CMF
我正在尝试使用创建包 symfony cmf。到目前为止一切正常,因为我能够编辑块但我无法保存我的内容。我收到以下错误:
我正在使用的前端代码如下:
我不确定的是“关于”属性的用途。“about=cms/test”只是我输入的一些任意值。我猜它代表了一些 phpcr-odm 节点,但我什至不确定在哪里设置该节点,甚至不确定这些文档是如何工作的。我已经为我的项目创建了我的 phpcr-odm 数据库并且 phpcr-odm 正在工作,但我不确定所有这些东西是如何工作的。我对 symfony cmf 真的很陌生。请让我知道如何使用 create bundle 保存内容,因为文档很烂。我还阅读了有意义的 phpcr-odm 学说文档,但我不确定如何将它与这个问题联系起来。
谢谢。
php - Symfony2 和 Doctrine PHPCR:分段错误
目前我的 Symfony2 应用程序有问题,使用 Doctrine PHPCR 包。在尝试显示 Sonata 管理员帖子列表时,我们遇到了分段错误:
[Thu Aug 01 12:33:11 2013] [notice] child pid 4239 exit signal Segmentation fault (11)
由于我们收到了很多帖子,我们将它们分片以获得正确的性能。这样,我们的帖子路径类似于:“/blog/economics/2014/02/10/my-awesome-post”。我们的节点及其对应的类是:
我的管理员列表如下所示:
现在,两个相关的文档方法:
摸索了一会儿,我注意到这两种方法中的一种出现了分段错误。不确定具体在哪里。如果我在 中返回一个硬写的字符串getParentTitle
,则一切正常。然而,一旦我调用getSectionParent
,就会发生分段错误。
我尝试用 调试它gdb
,这是我找到的最精确的堆栈:
不确定所有这些数据是否足够(我是段错误调试的新手)。
我试图用谷歌搜索这条消息,但我没有找到任何结论。然而,通过zend.enable_gc = 0
工程禁用垃圾收集器。但是,出于内存消耗微不足道的原因,我不会在生产中传递它。
任何想法?
编辑
从头开始重新安装我的机器后,我仍然遇到了问题。然而,从默认的 Debian PHP 版本 (5.4.4) 到 DotDeb 版本 (5.4.25) 解决了这个问题。但是,在同一个地方出现了另一个段错误:
我还需要一些帮助。:)
symfony - Symfony-cmf 路由一步一步
symfony-cmf 文档是一场噩梦,真的很难理解,而且似乎很多已经过时了。
我想我已经理解了路由的概念,但我不知道如何清楚地实现它。
- 如何注册路由器?
- 如何设置动态路由?
- 如何持久化文档并映射路线?
doctrine-odm - 如何使用 querybuilder 进行多次连接?
我正在为一个项目使用 Doctrine PHPCR。我在许多类之间有关系:
有了这种关系,我如何进行多重连接:
如果我使用 $queryBuilder->addJoinInner 两次给我错误:在 NotImplementException 中加入 Joins。我需要具有给定 c 实例的数据库中的所有 b 数据
php - 使用 Doctrine ORM、Doctrine PHPCR-ODM 和事件监听器的循环依赖
我正在研究一个复杂的 Symfony 项目,该项目将 Doctrine ORM 对象与 Doctrine PHPCR-ODM 文档混合在一起。一切正常,但我一直无法解决容器中侦听器之间的循环依赖注入问题。
场景是,我有多个 ODM 文档,它们在加载时设置 ORM 引用,这是通过事件侦听器完成的。一个示例配置是:
services.yml
:
Example\Common\EventListener\MyDocumentEventListener.php
:
MyDocument
在处理对象时,上面的所有内容都可以正常工作。(这基本上是 Doctrine 文档中描述的用于混合 ORM 和 MongoDB ODM 的精确实现)。
现在的问题是,当我还想在同一个应用程序中做相反的事情时——也就是说,我还想要一个 ORM 实体,它有一个侦听器,它填写一个或多个 ODM 文档的引用。
在不添加更多代码的情况下,假设我将services.yml
配置扩展为:
现在这将失败,因为我们有一个循环依赖:容器尝试将 ODM 侦听器注入到DocumentManager
的侦听器中,而后者EntityManager
又尝试注入DocumentManager
, 等等。(注意这个例子使用的是Registry
而不是管理器,但是结果是一样的)。
我尝试了几种不同的方法来解决这个问题,但还没有找到一种可行的方法。有没有人能够让 ORM 和 ODM 之间的双向监听器在单个项目中像这样工作?
不幸的是,我在这方面发现了一些例子。到目前为止,我的解决方法是创建一个服务来处理这些对象的加载/持久化,然后通过该服务运行所有内容,但与使用优雅的事件驱动系统相比,这似乎非常糟糕。
sonata-admin - 用于编辑多值的标准表单类型?(Symfony CMF PHPCR)
我使用 Sonata Admin 作为后端。我在 PHPCR Document 字段中是多值的(即在 PHP 中是一个字符串数组)。现在我想在 Sonata admin 中添加/删除元素。我应该使用哪种类型?尝试收集,但我在管理中一无所获;当我尝试 sonata_type_collection 时,管理员期望我提供管理员代码(我猜是另一个管理员),但事实并非如此。
我应该为文档字段使用哪种表单类型,如下所示?