Files
cms-core/Documentation/Changelog/14.0/Breaking-105920-Folder-getSubFolderThrowsFolderDoesNotExistException.rst

82 lines
2.6 KiB
ReStructuredText

.. include:: /Includes.rst.txt
.. _breaking-105920-1736777357:
=============================================================================
Breaking: #105920 - Folder->getSubFolder() throws FolderDoesNotExistException
=============================================================================
See :issue:`105920`
Description
===========
An exception handling detail within the **File Abstraction Layer (FAL) resource
handling** has been changed. When calling
:php:`getSubFolder('mySubFolderName')` on a
:php-short:`\TYPO3\CMS\Core\Resource\Folder` object, and if this subfolder does
not exist, the specific
:php:`\TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException` is
now raised instead of the global :php:`\InvalidArgumentException`.
Impact
======
The change may affect extensions that directly or indirectly call
:php:`Folder->getSubFolder()` and expect a :php:`\InvalidArgumentException` to
be thrown.
Affected installations
======================
:php-short:`\TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException` does not extend
:php:`\InvalidArgumentException`. Code that currently expects a
:php:`\InvalidArgumentException` to be thrown needs to be adapted.
Migration
=========
The change is breaking for code that takes an "optimistic" approach like:
"get the subfolder object, and if this throws, create one". Example:
.. code-block:: php
try {
$mySubFolder = $myFolder->getSubFolder('mySubFolder');
} catch (\InvalidArgumentException) {
$mySubFolder = $myFolder->createFolder('mySubFolder');
}
This should be changed to catch a
:php-short:`\TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException`
instead:
.. code-block:: php
use TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException;
try {
$mySubFolder = $myFolder->getSubFolder('mySubFolder');
} catch (FolderDoesNotExistException) {
$mySubFolder = $myFolder->createFolder('mySubFolder');
}
Extensions that need to stay compatible with both TYPO3 v13 and v14 should catch
both exceptions and should later avoid catching
:php:`\InvalidArgumentException` when v13 compatibility is dropped:
.. code-block:: php
use TYPO3\CMS\Core\Resource\Exception\FolderDoesNotExistException;
try {
$mySubFolder = $myFolder->getSubFolder('mySubFolder');
} catch (\InvalidArgumentException|FolderDoesNotExistException) {
// @todo: Remove \InvalidArgumentException from catch list when
// TYPO3 v13 compatibility is dropped.
$mySubFolder = $myFolder->createFolder('mySubFolder');
}
.. index:: FAL, PHP-API, NotScanned, ext:core