Human readable URLs

Slug configuration (TYPO3 9.5 upwards)

routeEnhancers:
  PageTypeSuffix:
    type: PageType
    map:
      sitemap.xml: 1533906435
      bookings.json: 1515242302
  BookingListPlugin:
    type: Extbase
    extension: Bookings
    plugin: BookingList
    routes:
      -
        routePath: '/'
        _controller: 'Bookings::list'
    defaultController: 'Bookings::list'
  BookingObjectPlugin:
    type: Extbase
    extension: Bookings
    plugin: BookingObject
    routes:
      -
        routePath: '/{bookingObject}'
        _controller: 'Bookings::show'
        _arguments:
          bookingObject: bookingObject
    defaultController: 'Bookings::show'
    aspects:
      bookingObject:
        type: PersistedAliasMapper
        tableName: tx_bookings_domain_model_bookingobject
        routeFieldName: slug
        routeValuePrefix: /
  BookingObjectActionPlugin:
    type: Extbase
    extension: Bookings
    plugin: BookingObject
    limitToPages: [20]
    routes:
      -
        routePath: '/{bookingObject}/{actionHash}/{status}'
        _controller: 'Bookings::action'
        _arguments:
          bookingObject: bookingObject
          actionHash: actionHash
          status: status
    defaultController: 'Bookings::action'
    requirement:
      actionHash: '^[a-zA-Z0-9]{32}$'
    aspects:
      bookingObject:
        type: PersistedAliasMapper
        tableName: tx_bookings_domain_model_bookingobject
        routeFieldName: slug
        routeValuePrefix: /
      status:
        type: StaticValueMapper
        map:
          accepted: accepted
          rejected: rejected

Realurl configuration

$configuration = [

    'fixedPostVars' => [
        'bookingsConfiguration' => [
            0 => [
                'GETvar' => 'tx_bookings_bookingobject[action]',
                'valueMap' => [],
                'noMatch' => 'bypass',
            ],
            1 => [
                'GETvar' => 'tx_bookings_bookingobject[controller]',
                'valueMap' => [],
                'noMatch' => 'bypass',
            ],
            2 => [
                'GETvar' => 'tx_bookings_bookingobject[bookingObject]',
                'lookUpTable' => [
                    'table' => 'tx_bookings_domain_model_bookingobject',
                    'id_field' => 'uid',
                    //'alias_field' => 'title',
                    'alias_field' => "CONCAT(title, '-', uid)",
                    'addWhereClause' => ' AND NOT deleted',
                    'useUniqueCache' => 1,
                    'useUniqueCache_conf' => [
                        'strtolower' => 1,
                        'spaceCharacter' => '-',
                    ],
                    'languageGetVar' => 'L',
                    'languageExceptionUids' => '',
                    'languageField' => 'sys_language_uid',
                    'transOrigPointerField' => 'l10n_parent',
                    'autoUpdate' => 1,
                    'expireDays' => 180,
                ],
            ],
        ],
        62 => 'bookingsConfiguration',
    ],

];