PHPackages                             plan2net/routi - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. plan2net/routi

ActiveTypo3-cms-extension[Utility &amp; Helpers](/categories/utility)

plan2net/routi
==============

The little TYPO3 CMS routing helpers

2.5.0(8mo ago)23.3k↑166.7%3GPL-2.0-or-laterPHPPHP ^8.2CI passing

Since Jan 8Pushed 8mo ago4 watchersCompare

[ Source](https://github.com/plan2net/routi)[ Packagist](https://packagist.org/packages/plan2net/routi)[ RSS](/packages/plan2net-routi/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (4)Versions (11)Used By (0)

Routi
=====

[](#routi)

[![Tests](https://github.com/plan2net/routi/actions/workflows/tests.yml/badge.svg)](https://github.com/plan2net/routi/actions/workflows/tests.yml)[![PHP](https://camo.githubusercontent.com/fff68409e83d3ed7aa0b378c76366d72fa0fb1f875467162ce208929b7e753a7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e32253230253743253230382e33253230253743253230382e342d626c75652e737667)](https://www.php.net/)[![TYPO3](https://camo.githubusercontent.com/cfea29f55fd4bf87d4727e5ce7640baaad6274047c8051a6c4ba85290b9e3565/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5459504f332d31322e3425323025374325323031332e342d6f72616e67652e737667)](https://typo3.org/)[![License](https://camo.githubusercontent.com/db325fb27559b7bfbfcfe17d21fca8077975965e2c5325737a9577786d8498e3/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d47504c253230322e302532422d677265656e2e737667)](LICENSE)

The little TYPO3 CMS routing helpers.

Supported: PHP 8.2–8.4, TYPO3 12.4 / 13.4.

Installation
============

[](#installation)

Install via Composer:

```
composer require plan2net/routi
```

Then configure the aspects in your site configuration as needed (examples below).

Page Router
===========

[](#page-router)

Enhances TYPO3’s PageRouter to accept `limitToPages` as either an array of page IDs or a comma‑separated string (including values provided via `%env(...)%`). This lets you scope route enhancers to specific pages while keeping lists in environment variables.

Example (site config):

```
routeEnhancers:
  MyEnhancer:
    type: Simple
    routePath: "/test/{param}"
    limitToPages: "%env(TYPO3_PAGE_LIST)%"  # e.g. "10,20,30"
    _arguments:
      param: param
```

Notes:

- `limitToPages` may be an array (`[5,10,15]`) or a string ("5,10,15").
- Non‑numeric tokens are ignored gracefully; routing still works.
- If omitted, the enhancer applies to all pages.

Routing Aspects
===============

[](#routing-aspects)

Why These Aspects
-----------------

[](#why-these-aspects)

These helpers close small but practical gaps in TYPO3’s core aspects:

- Core `PersistedAliasMapper` looks up the URL value on the same table as the record. Many real cases (e.g., file titles in `sys_file_metadata`) store the human value in a related table. `PersistedJoinAliasMapper` adds an explicit SQL join so you can keep data normalized without duplicating fields or writing custom slugs, while still benefiting from core’s language awareness.
- Core `StaticRangeMapper` builds a concrete list of values. For simple numeric constraints, `StaticIntegerRangeMapper` avoids generating the full range and just validates bounds — a lightweight fit for day, page, or year segments.
- Core range mappers don’t support fixed‑width (zero‑padded or custom‑padded) segments. `StaticPaddedRangeMapper` pads values to a target length with configurable pad string and direction, enabling patterns like `01..12` for months or other fixed‑width tokens.

PersistedJoinAliasMapper
------------------------

[](#persistedjoinaliasmapper)

Builds speaking URLs from a related table by joining another table when resolving/generating route field values. Useful when the human‑readable value lives in a different table (e.g., `sys_file_metadata.title` for `sys_file`).

Config keys:

- `tableName`: base table
- `joinTableName`: table to join
- `joinCondition`: SQL join condition
- `routeFieldName`: field (from the join table) used in the URL
- Inherits other options from TYPO3’s `PersistedAliasMapper` (e.g., `routeValuePrefix`).

Example:

```
routeEnhancers:
  Assets:
    type: Extbase
    extension: Vendor
    plugin: File
    routes:
      - { routePath: "/file/{file}", _controller: "File::show", _arguments: { file: uid } }
    defaultController: "File::list"
    aspects:
      file:
        type: PersistedJoinAliasMapper
        tableName: sys_file
        joinTableName: sys_file_metadata
        joinCondition: sys_file.uid = sys_file_metadata.file
        routeFieldName: title
```

StaticIntegerRangeMapper
------------------------

[](#staticintegerrangemapper)

Constrains a parameter to an integer range. Values outside the range are rejected (no match).

Example:

```
aspects:
  day:
    type: StaticIntegerRangeMapper
    start: "1"
    end: "31"
```

StaticPaddedRangeMapper
-----------------------

[](#staticpaddedrangemapper)

Like TYPO3’s `StaticRangeMapper`, but returns values padded to a fixed length using a custom pad string and type. Ideal for zero‑padded segments such as months `01..12`.

Config keys:

- `start`, `end`: string numbers delimiting the range
- `padString`: pad fill (e.g., `"0"` or `"XY"`)
- `padLength`: total length after padding
- `padType`: one of `STR_PAD_LEFT` (0), `STR_PAD_RIGHT` (1), `STR_PAD_BOTH` (2)

Example (months):

```
aspects:
  month:
    type: StaticPaddedRangeMapper
    start: "1"
    end: "12"
    padString: "0"
    padLength: 2
    padType: 0   # STR_PAD_LEFT
```

Activation
==========

[](#activation)

Installing the extension auto‑registers the custom PageRouter and the three aspect types. Configure them in your site `config.yaml` as shown above.

###  Health Score

48

—

FairBetter than 95% of packages

Maintenance61

Regular maintenance activity

Popularity26

Limited adoption so far

Community15

Small or concentrated contributor base

Maturity76

Established project with proven stability

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~297 days

Recently: every ~445 days

Total

8

Last Release

243d ago

Major Versions

1.0.0 → 2.0.02020-03-02

### Community

Maintainers

![](https://www.gravatar.com/avatar/f4ea950f22b43e010ba4f0a6effb0928a6a1d11f64d36cec0d030b757bdfa85e?d=identicon)[wazum](/maintainers/wazum)

![](https://www.gravatar.com/avatar/fdc5d7c9be0f04c0d84c56db1e263fb7cb88c40564a7c293f1a2d4aa543f0115?d=identicon)[plan2net@packagist](/maintainers/plan2net@packagist)

---

Top Contributors

[![wazum](https://avatars.githubusercontent.com/u/146727?v=4)](https://github.com/wazum "wazum (10 commits)")[![georgringer](https://avatars.githubusercontent.com/u/1905663?v=4)](https://github.com/georgringer "georgringer (1 commits)")[![thegass](https://avatars.githubusercontent.com/u/101392?v=4)](https://github.com/thegass "thegass (1 commits)")

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/plan2net-routi/health.svg)

```
[![Health](https://phpackages.com/badges/plan2net-routi/health.svg)](https://phpackages.com/packages/plan2net-routi)
```

###  Alternatives

[in2code/powermail

Powermail is a well-known, editor-friendly, powerful and easy to use mailform extension for TYPO3 with a lots of features

982.5M38](/packages/in2code-powermail)[fluidtypo3/flux

The flux package from FluidTYPO3

152982.2k20](/packages/fluidtypo3-flux)[friendsoftypo3/content-blocks

TYPO3 CMS Content Blocks - Content Types API | Define reusable components via YAML

96374.6k23](/packages/friendsoftypo3-content-blocks)[derhansen/sf_event_mgt

Configurable event management and registration extension based on ExtBase and Fluid

64313.9k6](/packages/derhansen-sf-event-mgt)[typo3/cms-t3editor

TYPO3 CMS T3Editor - JavaScript-driven editor with syntax highlighting and code completion. Based on CodeMirror.

115.9M50](/packages/typo3-cms-t3editor)[wazum/sluggi

TYPO3 extension for URL slug management with inline editing, auto-sync, locking, access control, and redirects

39488.5k](/packages/wazum-sluggi)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
