参数1传递给EntityViewBuilder必须实现接口,NULL给出
在我的Drupal项目中,我有这样的错误:参数1传递给EntityViewBuilder必须实现接口,NULL给出
Recoverable fatal error: Argument 1 passed to Drupal\Core\Entity\EntityViewBuilder::view() must implement interface Drupal\Core\Entity\EntityInterface, null given, called in /Users/team1/workspace/ga_p/modules/field_collection/src/Plugin/Field/FieldFormatter/FieldCollectionItemsFormatter.php on line 33 and defined in Drupal\Core\Entity\EntityViewBuilder->view() (line 110 of core/lib/Drupal/Core/Entity/EntityViewBuilder.php). I do not know if it's from having created multiple fields (fieldCollections)
但我不知道如何删除这个错误。
Drupal的版本:8.3.4
试试这个补丁
diff --git a/src/Plugin/Field/FieldType/FieldCollection.php b/src/Plugin/Field/FieldType/FieldCollection.php
index 8721220..c5335be 100644
--- a/src/Plugin/Field/FieldType/FieldCollection.php
+++ b/src/Plugin/Field/FieldType/FieldCollection.php
@@ -183,19 +183,15 @@ class FieldCollection extends EntityReferenceItem {
public function preSave() {
if ($field_collection_item = $this->getFieldCollectionItem()) {
- // TODO: Handle node cloning
- /*
- if (!empty($host_entity->is_new) && empty($entity->is_new)) {
+ $host = $this->getEntity();
+
+ // Handle node cloning
+ if($host->isNew() && !$field_collection_item->isNew()) {
// If the host entity is new but we have a field_collection that is not
// new, it means that its host is being cloned. Thus we need to clone
// the field collection entity as well.
- $new_entity = clone $entity;
- $new_entity->target_id = NULL;
- $new_entity->revision_id = NULL;
- $new_entity->is_new = TRUE;
- $entity = $new_entity;
+ $field_collection_item = $field_collection_item->createDuplicate();
}
- */
// TODO: Handle deleted items
/*
@@ -231,11 +227,10 @@ class FieldCollection extends EntityReferenceItem {
}
*/
- $this->newHostRevision = $this->getEntity()->isNewRevision();
+ $this->newHostRevision = $host->isNewRevision();
// If the host entity is saved as new revision, do the same for the item.
if ($this->newHostRevision) {
- $host = $this->getEntity();
$field_collection_item->setNewRevision();
diff --git a/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php b/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
index 4d6ae09..800383f 100644
--- a/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
+++ b/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
@@ -104,9 +104,8 @@ class FieldCollectionEmbedWidget extends WidgetBase {
protected function formMultipleElements(FieldItemListInterface $items, array &$form, FormStateInterface $form_state) {
// We don't want to render empty items on field collection fields
// unless a) the field collection is empty ; b) the form is rebuilding,
- // which means that the user clicked on "Add another item"; or
- // c) we are creating a new entity.
- if ((count($items) > 0) && !$form_state->isRebuilding() && !$items->getEntity()->isNew()) {
+ // which means that the user clicked on "Add another item"
+ if ((count($items) > 0) && !$form_state->isRebuilding()) {
$field_name = $this->fieldDefinition->getName();
$cardinality = $this->fieldDefinition->getFieldStorageDefinition()->getCardinality();
$parents = $form['#parents'];
提到here。
我不知道很好,他们如何把补丁。 你能否告诉我如何应用它的细节? 谢谢 – Javier
我执行
patch -p1 < bin/patchs/fieldCollection.patch
输出:
can't find file to patch at input line 5
Perhaps you used the wrong -p
or --strip option? The text leading up to this was:
-------------------------- |diff --git a/src/Plugin/Field/FieldType/FieldCollection.php
b/src/Plugin/Field/FieldType/FieldCollection.php |index
8721220..c5335be 100644 |--- a/src/Plugin/Field/FieldType/FieldCollection.php |+++
b/src/Plugin/Field/FieldType/FieldCollection.php
-------------------------- File to patch:
在这一点上,我发现我的电脑 “FieldCollection.php” 的文件上,把绝对路径
/用户/team1/workspace/ga_p/modules/field_collection/src/Plugin/Field/FieldType/FieldCollection.php
patching file /Users/team1/workspace/ga_p/modules/field_collection/src/Plugin/Field/FieldType/FieldCollection.php
Hunk #1 FAILED at 183. Hunk #2 succeeded at 159 (offset -68 lines). 1
out of 2 hunks FAILED -- saving rejects to file
/Users/team1/workspace/ga_p/modules/field_collection/src/Plugin/Field/FieldType/FieldCollection.php.rej
can't find file to patch at input line 47 Perhaps you used the wrong
-p or --strip option? The text leading up to this was:
-------------------------- |diff --git a/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
b/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php |index
4d6ae09..800383f 100644 |---
a/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php |+++
b/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
File to patch: /Users/team1/workspace/ga_p/modules/field_collection/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
在这一点上,我在我的电脑上找到 “FieldCollectionEmbedWidget.php” 文件,并将绝对路径
/用户/ TEAM1 /工作区/ ga_p /模块/ field_collection/src目录/插件/场/FieldWidget/FieldCollectionEmbedWidget.php
patching file
/Users/team1/workspace/ga_p/modules/field_collection/src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
Hunk #1 succeeded at 111 (offset 7 lines).
但是问题仍然存在
该修补程序未应用 - 您需要在此运行命令/ Users/team1/workspace/ga_p/modules/field_collection/...否则手动挂起线路,重建缓存并重试。 –
我在该文件夹中运行该命令并应用了补丁程序。但问题仍然存在...... – Javier
您重建了缓存吗? –
我试图通过GIT
运行补丁[email protected]:[~/workspace/ga_p/modules/field_collection]: (master): git apply -v /Users/team1/workspace/ga_p/bin/patchs/fieldCollection.patch
Skipped patch 'src/Plugin/Field/FieldType/FieldCollection.php'.
Skipped patch 'src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php'.
因为它没有工作,我尝试过这样的:
[email protected]:[~/workspace/ga_p/modules/field_collection]: (master): patch -p1 < /Users/team1/workspace/ga_p/bin/patchs/fieldCollection.patch
patching file src/Plugin/Field/FieldType/FieldCollection.php
Hunk #1 FAILED at 183.
Hunk #2 FAILED at 227.
2 out of 2 hunks FAILED -- saving rejects to file src/Plugin/Field/FieldType/FieldCollection.php.rej
patching file src/Plugin/Field/FieldWidget/FieldCollectionEmbedWidget.php
Reversed (or previously applied) patch detected! Assume -R? [n]
我不明白发生了什么。
请问,我该如何解决这个问题?
谢谢
同样的问题在这里https://drupal.stackexchange.com/questions/245964/argument-1-passed-to-entityviewbuilder-must-implement-interface-null-given –