私はCiviCRMプロジェクトの開発者および管理者です。私たちはDrupal 8バージョンのCiviCRMを作ろうとしており、長い道のりをたどっています。私たちは、プロジェクトの主要なブロッカーを理解しようとする集団キーボードに対して頭を打っています。
CiviCRMはしばらくの間Symfonyを使用しており、含まれているバージョンはDrupalに同梱されているものとは異なります。
Drupal 8でCiviCRMをインストールできますが、インストール後、他のDrupalモジュールをインストールすることはできません。
結局のところ、SymfonyのCiviCRMバージョンがDrupalバージョンの前にロードされるため、問題が発生します。
Drupalに同梱されているものとは異なるバージョンのSymfonyを含むDrupal 8モジュールを知っている人はいますか?
最近、ルートヴィヒプロジェクトに遭遇しました。このモジュールを使用すると、 ServiceProviderBase
を拡張するクラスに名前空間を登録できます。
Drupal 8バージョンのCiviCRMモジュールに、CivicrmServiceProvider
クラスとregister()
を定義するCivicrmServiceProvider.phpファイルを含めることは可能ですか?これを機能させるためにコンテナー名前空間を追加するメソッド?
多くのCiviCRMファイルには、Symfonyで始まるDrupalのようなuse
ステートメントがあります here のように。
実際にCiviCRMコアをDrupal doc_root/librariesフォルダーに配置し、ライブラリモジュールを使用します。
これはCiviCRMのリポジトリですDrupal module 8.x version 、これまでに入手したものを誰かが見たい場合。誰かがこのための魔法のエリキシルを持っている場合、私たちのコミュニティにはたくさんの幸せな人々がいると言えるでしょう。ですから、私たちを助ける方法を知っているなら、ぜひやってください。
CiviCRMはインストールされ、CiviCRMページは機能します。機能しないのは、CiviCRMをインストールした後、admin/modulesページから他のモジュールをインストールできないことです。私が知る限り、それは壊れている唯一のものです。また、Crushをインストールした後、Drushでモジュールをインストールしても機能します。
CiviCRMのインストール後に別のモジュールをインストールしようとすると、次のエラーが発生します。
PHPの致命的なエラー:/var/www/html/civi-for-d8/core/lib/Drupal/Core/DependencyInjection/YamlFileLoader.phpの206行目の未定義のメソッドSymfony\Component\DependencyInjection\Definition :: setFactory()の呼び出し
Drupal 8.3.5にあります。Drupal 8のCiviCRMをクリーンにインストールしようとすると、Drupal 8.4-devインスタンスが原因で次のエラー:
Drupal\Component\Serialization\Exception\InvalidDataTypeException:予約済みインジケーター "@"は単純なスカラーを開始できません。 8行目でスカラーを引用する必要があります( "arguments:[@string_translation、@ civicrm.page_state]"の近く)。 Drupal\Component\Serialization\YamlSymfony :: decode()内(/var/www/html/drupal84/core/lib/Drupal/Component/Serialization/YamlSymfony.phpの40行目)。
したがって、CiviCRMがDrupal 8 via composer(ie。composer require civicrm/civicrm-core
in Drupal = root)とCiviCRMによるSymfonyの使用はSymfony 2.8または3.xと互換性があり(非推奨の機能を使用していない)、これは機能する可能性があります。
これにより、2つではなく、Drupalのベンダーディレクトリにすべてがインストールされます。つまり、CiviCRMはDrupal 8でSymfonyバージョンを使用します。ただし、CiviCRMが新しいSymfonyバージョンと互換性がある場合( Drupal 6&7およびその他のCMS)の古いバージョンがバンドルされていても問題ありません。
おもう?
更新:はい、動作します-試しました。 :-)最初は以下をCiviCRMの問題キュー( CRM-17652 )に投稿しましたが、完全を期すためにここに再投稿しました。
composerは多くの人にとって非常に新しいので、私はいくつかの高レベルのcomposer stuff all CiviCRMで実行できる方法の1つ:
^2.4.3
のように、バージョン2.4.3と3.0.0まで(ただし、含まない)^2.5
を「必要としている」と言うことができます。これは、バージョン2.5.0から3.0.0まで(ただし、含まない)と互換性があることを意味しますcomposer require civicrm/civicrm-core
を使用してCiviCRMライブラリとそのすべての依存関係を要求します。CiviCRMがSymfony 2.8と互換性がある場合(= Drupal 8.3.x)すべてがインストールされ、Drupalの単一のSymfony 2.8を使用して正常に動作します。すべての依存関係は最終的にDrupalのベンダーディレクトリにあります。作曲家ベースのCMSの場合、これはまさに正しい方法だと思います。この問題は現在SymfonyとDrupalに影響を及ぼしていますが、PHPコミュニティがcomposerを介してますます多くのサードパーティライブラリを使用するようになるため、他のバージョンの競合を伴う他のCMSに非常によく影響する可能性があります。
だから、約束どおり、私は実際にこれを限られた程度で機能させました:-)私は完全にDrupal/Composer/Symfonyの観点からこれに来ています-CiviCRMの経験はあまりないので、おそらくいくつかあります以下の私のプロセスを実行するより良い方法。アドバイスは大歓迎です!
git clone https://github.com/dsnopek/civicrm-drupal.git --branch composer-library
を実行します/admin/modules
)に移動し、CiviCRMモジュールをインストールしますdrush cr
)このすべての後、CiviCRMはDrupalからのSymfony 2.8およびDrupalのベンダーディレクトリの依存関係を使用しており、独自のベンダーディレクトリから何もロードしていません。Huzzah!
これらの変更の前に失敗した「電話」モジュールの有効化をテストしましたが( 再現するための私の手順 を参照)、それらで正常に動作します。 :-)
これは可能ではないと思います。
Drupal 8.4は実際にはすでにSymfony 3に切り替えられていますが、Drushに関連する同様の議論があり、同じ問題があります。 Drush 8.xがインストールされないDrupal 8.4.xおよびDrushマスターがインストールされないDrupal 8.3.x および symfonyコンポーネントは3.2.6に更新されます
2つの異なるsymfonyバージョンをロードすることはできません。統合を解除するか、Drupalを解除します。 symfony3はまだ8.4にはないかもしれませんが、symfony2のセキュリティサポートはDrupal8のセキュリティサポートの前に終了するため、ある時点で切り替える必要があります。
理論的には、ここでの唯一の問題は、ファイルの場所とクラスの名前空間です。残念ながら、私がcomposerで知っている唯一のツールでは、パッケージ名ごとにVERSIONごとに指定することはできません。
完全に別のオートローダーとして設定してみましたか?