field layout elements and deleted fields #17939
                
     Open
            
            
          
      
        
          +6
        
        
          −0
        
        
          
        
      
    
  
  Add this suggestion to a batch that can be applied as a single commit.
  This suggestion is invalid because no changes were made to the code.
  Suggestions cannot be applied while the pull request is closed.
  Suggestions cannot be applied while viewing a subset of changes.
  Only one suggestion per line can be applied in a batch.
  Add this suggestion to a batch that can be applied as a single commit.
  Applying suggestions on deleted lines is not supported.
  You must change the existing code in this line in order to create a valid suggestion.
  Outdated suggestions cannot be applied.
  This suggestion has been applied or marked resolved.
  Suggestions cannot be applied from pending reviews.
  Suggestions cannot be applied on multi-line comments.
  Suggestions cannot be applied while the pull request is queued to merge.
  Suggestion cannot be applied right now. Please check back later.
  
    
  
    
Description
Issue:
Field layout elements with non-existent fields are still being added to the layout, causing them to never get deleted from the project config.
Steps to reproduce:
fieldUidvalueWhen we get the field layout, we create tabs for it, and each tab gets all the elements it’s supposed to have.
Up until
5.8.12, whenFields->createLayoutElement()was called fromFieldLayoutTab->setElements(), theFieldNotFoundExceptionwas thrown if the field couldn’t be found from theCustomField->setFieldUid()method.The changes in e80ca1b moved the throwing of the
FieldNotFoundExceptionto theCustomField->getField()method, which means it’s never really thrown when rendering, e.g. entry type page with its field layout. This causes the layout element for the ghost field to be included in the field layout, which in turn means that it’s never removed from the project config.Fix:
When a layout element is created for a
CustomField, check that the field exists, and if not, don’t include it in the field layout tab’s elements.Related issues
caught while working on a Feed Me issue (craftcms/feed-me#1679)