問題タブ [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 がマップされた Document クラスを検出しない
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 クラスが正しくロードされていることを確認しましたが、マップされた Document クラスであることを DocumentManager に認識させるような方法で注釈が処理されていないようです。
私の推測では、簡単な設定手順を見落としていると思いますが、PHPCR、PHPCR-ODM、さらには Symfony CMF のドキュメントを繰り返し徹底的に調べても、何も見つからないようです。そこにある例のほとんどは、Symfony CMF を介して PHPCR を使用することを含んでおり、PHPCR-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 - Symfony2 と Doctrine PHPCR: セグメンテーション違反
現在、Doctrine PHPCR バンドルを使用して、Symfony2 アプリケーションに問題があります。Sonata 管理者の投稿リストを表示しようとすると、セグメンテーション エラーが発生しました。
[Thu Aug 01 12:33:11 2013] [通知] child pid 4239 exit signal セグメンテーション違反 (11)
たくさんの投稿があったので、適切なパフォーマンスが得られるように分割しました。このように、投稿パスは「/blog/economics/2014/02/10/my-awesome-post」のようになります。私たちのノードは、対応するクラスで次のとおりです。
私の管理者リストは次のようになります。
そして今、関連する 2 つのドキュメント メソッド:
しばらく手探りした後、これら 2 つの方法のいずれかでセグメンテーション違反が発生していることに気付きました。正確な場所はわかりません。でハードライトされた文字列を返すとgetParentTitle
、すべて正常に動作します。しかし、 を呼び出すとすぐにgetSectionParent
セグメンテーション違反が発生します。
でデバッグしようとしましgdb
たが、これが私が見つけた最も正確なスタックです:
これらのデータがすべて十分かどうかはわかりません (私は segfault デバッグの初心者です)。
このメッセージを Google で検索しようとしましたが、結論を下すものは見つかりませんでした。それでも、zend.enable_gc = 0
作品を介してガベージコレクターを無効にします。ただし、メモリ消費の些細な理由から、本番環境では渡しません。
何か案が?
編集
マシンを最初から再インストールした後も、まだ問題が発生しています。それでも、デフォルトの Debian PHP バージョン (5.4.4) から DotDeb バージョン (5.4.25) に移行することで問題は解決しました。ただし、同じ場所に別のセグメンテーション違反が発生しました。
まだ助けが必要です。:)
sonata-admin - 多値編集用の標準フォームタイプ? (Symfony CMF PHPCR)
Sonata Admin をバックエンドとして使用しています。多値のPHPCRドキュメントフィールド内にあります(つまり、PHPでは文字列の配列です)。Sonata admin 内で要素を追加/削除したいと思います。どのタイプを使用すればよいですか? コレクションを試みましたが、管理者には何も得られません。私がsonata_type_collectionを試してみると、管理者は私に管理者コードを期待しています(別の管理者だと思います)が、そうではありません。
以下のようなドキュメントのフィールドには、どのフォーム タイプを使用すればよいですか?