75 lines
2.4 KiB
ReStructuredText
75 lines
2.4 KiB
ReStructuredText
.. include:: /Includes.rst.txt
|
|
|
|
.. _feature-99053-1668163567:
|
|
|
|
======================================================
|
|
Feature: #99053 - Route aspect fallback value handling
|
|
======================================================
|
|
|
|
See :issue:`99053`
|
|
|
|
Description
|
|
===========
|
|
|
|
Imagine a route like `/news/{news_title}` that has been filled with an
|
|
"invalid" value for the `news_title` part. Often these are outdated, deleted
|
|
or hidden records. Usually TYPO3 reacts to these "invalid" URL sections at a
|
|
very early stage with an HTTP status code `404` (resource not found).
|
|
|
|
The new property `fallbackValue = [string|null]` can prevent the above scenario
|
|
in several ways. By specifying an alternative value, a different record,
|
|
language or other detail can be represented. Specifying `null` removes the
|
|
corresponding parameter from the route result. In this way, it is up to the
|
|
developer to react accordingly.
|
|
|
|
In the case of Extbase extensions, the developer can define the parameters in
|
|
their calling controller action as nullable and deliver corresponding
|
|
flash messages that explain the current scenario better than a 404 HTTP
|
|
status code.
|
|
|
|
Examples
|
|
--------
|
|
|
|
.. code-block:: yaml
|
|
|
|
routeEnhancers:
|
|
NewsPlugin:
|
|
type: Extbase
|
|
extension: News
|
|
plugin: Pi1
|
|
routes:
|
|
- routePath: '/detail/{news_title}'
|
|
_controller: 'News::detail'
|
|
_arguments:
|
|
news_title: 'news'
|
|
aspects:
|
|
news_title:
|
|
type: PersistedAliasMapper
|
|
tableName: tx_news_domain_model_news
|
|
routeFieldName: path_segment
|
|
|
|
# string values lead to parameter `&tx_news_pi1[news]=0`
|
|
fallbackValue: '0'
|
|
|
|
# null values lead to parameter `&tx_news_pi1[news]` being removed
|
|
fallbackValue: null
|
|
|
|
Custom mapper implementations can incorporate this behavior by implementing
|
|
the new :php:`\TYPO3\CMS\Core\Routing\Aspect\UnresolvedValueInterface` which
|
|
is provided by :php:`\TYPO3\CMS\Core\Routing\Aspect\UnresolvedValueTrait`.
|
|
|
|
.. code-block:: php
|
|
|
|
use TYPO3\CMS\Core\Routing\Aspect\MappableAspectInterface;
|
|
use TYPO3\CMS\Core\Routing\Aspect\UnresolvedValueInterface;
|
|
use TYPO3\CMS\Core\Routing\Aspect\UnresolvedValueTrait;
|
|
|
|
class MyCustomEnhancer implements MappableAspectInterface, UnresolvedValueInterface
|
|
{
|
|
use UnresolvedValueTrait;
|
|
// ...
|
|
}
|
|
|
|
|
|
.. index:: Frontend, YAML, ext:core
|