---
title: "Deprecation: #109575 - Various ContentObjectRenderer properties/methods"
manual: "TYPO3 Core Changelog"
version: "main"
permalink: "https://docs.typo3.org/permalink/changelog:deprecation-109575"
source: "Changelog/14.3/Deprecation-109575-ContentObjectRendererPropertiesAndMethods.rst"
typo3-version: "14.3"
typo3-major: 14
type: "deprecation"
issue: 109575
forge: "https://forge.typo3.org/issues/109575"
tags: ["PHP-API", "TypoScript", "PartiallyScanned", "ext:frontend"]
rendered: "2026-10-01T19:27:47+00:00"
---

# Deprecation: #109575 - Various ContentObjectRenderer properties/methods {#deprecation-109575}

See [forge#109575](https://forge.typo3.org/issues/109575)

## Description {#description}

Several properties and a methods of
`\TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer` have been
deprecated.

### Properties {#properties}

#### `ContentObjectRenderer->$lastTypoLinkResult` {#php-contentobjectrenderer-lasttypolinkresult}

The property held the `\TYPO3\CMS\Frontend\Typolink\LinkResultInterface`
produced by the most recent `createLink()` call. Relying on a
side-effect property that is overwritten on every subsequent link call is
fragile. Use the return value of `createLink()` directly instead.

#### `ContentObjectRenderer->$currentRecordNumber` and `ContentObjectRenderer->$parentRecordNumber` {#php-contentobjectrenderer-currentrecordnumber-and-php-contentobjectrenderer-parentrecordnumber}

These counters are incremented by `ContentContentObject` and
`RecordsContentObject` while iterating over their record sets, and
exposed to TypoScript via `getData cobj:parentRecordNumber`.
They carry no known use case for third-party extensions and are
deprecated.

#### `ContentObjectRenderer->$checkPid_badDoktypeList` {#php-contentobjectrenderer-checkpid-baddoktypelist}

The property was intended to cache a comma-separated list of page
doctypes that should be excluded from link target checks, but it was
never written to or read from any code path in TYPO3 itself.

### Methods {#methods}

#### `ContentObjectRenderer->readFlexformIntoConf()` {#php-contentobjectrenderer-readflexformintoconf}

The method parses a FlexForm XML string or array into a flat TypoScript
configuration array. It only covered the `sDEF` sheet and had no
equivalent in TYPO3 core itself. Use
`\TYPO3\CMS\Core\Configuration\FlexForm\FlexFormTools::convertFlexFormContentToArray()`
to decode FlexForm data, and map the result into your own configuration
structure as needed.

### TypoScript getData type {#typoscript-getdata-type}

The `cobj:parentRecordNumber` type for the
[getData](https://docs.typo3.org/m/typo3/reference-typoscript/main/en-us/Functions/Data.html#data-type-gettext-cobj) function is deprecated.
It returned the value of `$parentRecordNumber`, which is now
deprecated.

### `ContentObjectRenderer->getRequest()` fallback to `$GLOBALS['TYPO3_REQUEST']` {#php-contentobjectrenderer-getrequest-fallback-to-php-globals-typo3-request}

The `getRequest()` method falls back to `$GLOBALS['TYPO3_REQUEST']` when no request
had been set via `setRequest()` before. This fallback has been deprecated. Third-party code that
instantiates `ContentObjectRenderer` must call `setRequest(ServerRequestInterface $request)`
before calling `start()` or any other method that requires the request.

## Impact {#impact}

Accessing `$lastTypoLinkResult` or
`$checkPid_badDoktypeList`, calling `readFlexformIntoConf()`,
evaluating the `cobj:parentRecordNumber` getData type, or
triggering the `$GLOBALS['TYPO3_REQUEST']` fallback in
`getRequest()` all raise `E_USER_DEPRECATED` errors at runtime.
The fallback will additionally throw an exception in TYPO3 v15 when no
request has been set.

`$currentRecordNumber` and `$parentRecordNumber` carry only a
docblock `@deprecated` annotation for now — they remain functional
and do not raise runtime errors.

## Affected installations {#affected-installations}

Installations with extensions that:

-   Read `$cObj->lastTypoLinkResult` after calling `createLink()`
-   Read `$currentRecordNumber`, `$parentRecordNumber`, or
    `$checkPid_badDoktypeList`
-   Call `$cObj->readFlexformIntoConf()`
-   Use the `cobj:parentRecordNumber` getData type in TypoScript;
-   Instantiate `ContentObjectRenderer` without calling `setRequest()` before `start()`.

The extension scanner detects usages of the deprecated properties as
weak matches.

## Migration {#migration}

### `$lastTypoLinkResult` {#php-lasttypolinkresult}

Capture the return value of `createLink()` directly:

```php
// Before
$cObj->createLink($linkText, $conf);
$result = $cObj->lastTypoLinkResult;

// After
$result = $cObj->createLink($linkText, $conf);
```

### `setRequest()` before `start()` {#php-setrequest-before-php-start}

Call `setRequest()` immediately after instantiation, before any other method:

```php
// Before
$cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
$cObj->start($data, $table);

// After
$cObj = GeneralUtility::makeInstance(ContentObjectRenderer::class);
$cObj->setRequest($request);
$cObj->start($data, $table);
```

### `readFlexformIntoConf()` {#php-readflexformintoconf}

Replace with `FlexFormTools::convertFlexFormContentToArray()` and
map the decoded array into the configuration structure as needed:

```php
// Before
$conf = [];
$cObj->readFlexformIntoConf($flexFormXml, $conf);

// After
$conf = $this->flexFormTools->convertFlexFormContentToArray($flexFormXml);
```

### All other deprecated items {#all-other-deprecated-items}

Remove all usages. None of the remaining deprecated properties, nor
`cobj:parentRecordNumber` getData type have a replacement.
