---
title: "Important: Validation primitives moved to EXT:academic_base"
manual: "Academic Profiles"
version: "main"
source: "Changelog/3.0/Important-ValidationPrimitivesMovedToAcademicBase.rst"
rendered: "2026-10-02T20:47:49+00:00"
---

# Important: Validation primitives moved to EXT:academic_base {#important-validation-primitives-moved-to-academic-base}

## Description {#description}

The value objects and the ViewHelper behind
`Configuration/AcademicPersons/Settings.yaml` moved to
`EXT:academic_base`, together with the loading, the flag normalisation and the
TCA merge that `AcademicPersonsSettingsFactory` and
`AcademicPersonsSettings` carried inline:

| Before | Now |
| --- | --- |
| `\FGTCLB\AcademicPersons\Settings\Validation` | `\FGTCLB\AcademicBase\Settings\Validation` |
| `\FGTCLB\AcademicPersons\Settings\ValidationSet` | `\FGTCLB\AcademicBase\Settings\ValidationSet` |
| `\FGTCLB\AcademicPersons\ViewHelpers\ValidationEnsureViewHelper` | `\FGTCLB\AcademicBase\ViewHelpers\ValidationEnsureViewHelper` |
| `AcademicPersonsSettings::getValidationTcaTableConfig()` | `\FGTCLB\AcademicBase\Settings\TcaValidationMerger::merge()`, applied to five of the six person tables by a listener of `AfterTcaCompilationEvent`. The profile information table gets a `types` fragment built from the same value objects instead |

All of them are `@internal`. **No class aliases are registered** for the
old names: the classes never were public API, and no extension of this set
referenced them from outside `EXT:academic_persons` and
`EXT:academic_persons_edit`, both of which are adapted.

Nothing changes for the YAML file itself - its location, its sets and its
flags - and the package walk of an installation's override is as before. How
the files of several packages are combined does change in the same release,
see [Breaking: Settings files merge recursively](Breaking-SettingsFilesMergeRecursively.html#breaking-settings-files-merge-recursively).

The normalised result is still cached in the core cache, but under the new
identifier `AcademicPersons_Settings_v3` instead of
`AcademicPersons_Settings`. The cache entry is a PHP statement naming the
classes of the settings graph, so an entry written by an earlier version
references the removed `\FGTCLB\AcademicPersons\Settings\ValidationSet`
and would fail to load before any check could reject it. The new identifier
leaves such an entry untouched and unused; it disappears with the next cache
flush.

## Impact {#impact}

Code that type hints or instantiates the old classes fails with a class not
found error and has to import the `EXT:academic_base` names.

A project that declares the ViewHelper namespace in a template of its own has
to point it at the new location, or the template no longer renders:

```html
xmlns:p="http://typo3.org/ns/FGTCLB/AcademicBase/ViewHelpers"
```

The `p:validationEnsure` calls in the template stay as they are.

A project that overrides one of the frontend editing form partials of
`EXT:academic_persons_edit` has nothing to repoint and nothing to keep: the
Extbase form flow those partials belonged to is replaced in 3.0, the
`Partials/Profile/Forms/` directory is gone with it, and no template of
either extension declares the namespace any more. Delete the override and
start from what the new editing view renders - the changelog entry *Breaking:
Replaced the profile editing view* of `EXT:academic_persons_edit` lists the
removed templates and the partials that took their place.

No cache flush is required for the settings themselves - see the cache
identifier above - but flushing all caches after the update is harmless and
removes the orphaned entry.
