{"record":{"id":"314c830b35e7099e","repo":"phacility/phabricator","slug":"unable-to-find-a-content-column-to-place-the-foote","errorCode":null,"errorMessage":"Unable to find a content column to place the footer inside.","messagePattern":"Unable to find a content column to place the footer inside\\.","errorType":"exception","errorClass":"Exception","httpStatus":null,"severity":"error","filePath":"src/view/formation/PHUIFormationView.php","lineNumber":202,"sourceCode":"\n      $expander->setColumnItem($item);\n      $item->setExpander($expander);\n\n      $control_item->appendExpander($expander);\n    }\n\n    return $items;\n  }\n\n  public function setFooter($footer) {\n    foreach ($this->items as $item) {\n      if ($item->getColumn() instanceof PHUIFormationContentView) {\n        $item->getColumn()->appendChild($footer);\n        return $this;\n      }\n    }\n\n    throw new Exception(\n      pht('Unable to find a content column to place the footer inside.'));\n  }\n\n}\n","sourceCodeStart":184,"sourceCodeEnd":207,"githubUrl":"https://github.com/phacility/phabricator/blob/5720a38cfe95b00ca4be5016dd0d2f3195f4fa04/src/view/formation/PHUIFormationView.php#L184-L207","documentation":"PHUIFormationView::setFooter() places the footer inside the main content column: it scans the registered column items for one whose column is a PHUIFormationContentView and appends there. A formation view built only from flank columns (newFlankColumn()), or one where setFooter() runs before any content column exists, has nowhere to put the footer and throws. PhabricatorStandardPageView::willRenderPage() also calls setFooter() automatically when a page footer is attached and the first child is a PHUIFormationView.","triggerScenarios":"Calling setFooter($footer) on a PHUIFormationView that has had only newFlankColumn() calls (no newContentColumn()); or a controller attaching a page footer to a standard page whose layout is a formation view lacking a content column.","commonSituations":"Custom full-formation application layouts (Diffusion/Maniphest-style) assembled by hand; ordering bugs where the footer is set before the content column is created; conditionally skipping the content column on some screens.","solutions":["Create a content column first: $content = $formation->newContentColumn(); and put the main content in it, then call setFooter().","Reorder construction so all columns exist before the footer is attached.","If a formation layout is not required, use a regular layout so the footer renders through the normal page mechanism."],"exampleFix":"// before\n$formation = id(new PHUIFormationView());\n$formation->newFlankColumn()->setHeaderText(pht('Menu'));\n$formation->setFooter($footer); // throws: no content column\n\n// after\n$formation = id(new PHUIFormationView());\n$formation->newFlankColumn()->setHeaderText(pht('Menu'));\n$content = $formation->newContentColumn();\n$content->appendChild($main_content);\n$formation->setFooter($footer);","handlingStrategy":"validation","validationCode":"// PHUIFormationView exposes no items getter; track the content column yourself:\n$content = $formation->newContentColumn();\n$content->appendChild($main_content);\n// ... later:\nif ($content) {\n  $formation->setFooter($footer);\n}","typeGuard":null,"tryCatchPattern":"try {\n  $formation->setFooter($footer);\n} catch (Exception $ex) {\n  // No content column: render the footer outside the formation layout.\n  $layout = array($formation, $footer);\n}","preventionTips":["Always create the content column first; it is the structural anchor of a formation layout.","Expect exactly one newContentColumn() per formation view.","Check controllers that attach page footers against formation-based layouts."],"tags":["php","phabricator","formation-view","layout","footer"],"backgroundTag":"missing-content-column","analyzedSha":"5720a38cfe95b00ca4be5016dd0d2f3195f4fa04","analyzedAt":"2026-08-21T05:07:25.672Z","schemaVersion":2},"datasetVersion":"2026-08-21T11:28:35.574Z"}