PHPackages                             garvinhicking/gh-validationdummy - 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. [Validation &amp; Sanitization](/categories/validation)
4. /
5. garvinhicking/gh-validationdummy

ActiveTypo3-cms-extension[Validation &amp; Sanitization](/categories/validation)

garvinhicking/gh-validationdummy
================================

Validation example

0.2.2(2y ago)08MITPHPPHP &gt;= 8.1.0, &lt;= 8.3.99

Since May 29Pushed 1y ago1 watchersCompare

[ Source](https://github.com/garvinhicking/gh_validationdummy)[ Packagist](https://packagist.org/packages/garvinhicking/gh-validationdummy)[ RSS](/packages/garvinhicking-gh-validationdummy/feed)WikiDiscussions main Synced today

READMEChangelogDependencies (1)Versions (3)Used By (0)

gh\_validationdummy
===================

[](#gh_validationdummy)

Just a dummy to showcase Extbase Validation for CRUD

This shows simple record creation and editing for a simple model ("Person").

There are two fields, "firstName" and "lastName" that are the only editable fields.

There is a third "special" field however. This can be created in the backend only, and is mandatory.

In the frontend editing, that "special" field should never be touchable.

If you simply omit the property in your `` section of the frontend creation/editing part, the validation ("NotEmpty") still kicks in, and will prevent you from persisting or even inspecting any element, where "special" is not set.

If you pass `@IgnoreValidation("person")` (respectively `#[IgnoreValidation(...)]`) to the controller's `updateAction` or `createAction` you would completely disable any validation of the object (not good). Of course, you could validate the object within the controller action completely manually in that case.

If you would use `@Validate(...)` with a custom validation instead, this would always be executed on top of the domain model validation - so you could only add extra validation, and not bypass the existing one.

The solution that this extension show-cases is a "DTO" ("Data transfer object") way. Here, a small variant of the main domain model is created, without the `special` property. It only holds the properties that you really edit on the frontend.

Inside the actions, the DTO is populated with the original domain model input, and before persisting, the real object is retrieved and filled with the data of the DTO.

Even though this might feel like much redundancy, it really helps you to create a distinct model of a frontend-editable domain model. You might even use a DTO as your base, and let the "normal" Domain Model extend from both your DTO and the `AbstractEntity` from extbase, so that only your extbase domain model would hold all the data that is not available to the frontend.

This is just a very quick and dirty example, hope it helps anyone.

How to use
==========

[](#how-to-use)

- Install the extension (i.e. via Packagist `garvinhicking/gh-validationdummy`) or copy+paste it to your `packages` structure (or retrieve via GIT)
- Add the TypoScript template to your root site
- Create two pages like "DTO" and "Validator"
- Place the corresponding "ValidationDummy: DTO" on your "DTO" page, and "ValidationDummy: Validator" on the "Validator" page
- Open the frontend, create data via the links provided of the plugins
- You can also insert records in the backend (inside a SysFolder) (so that you have an initial list view)

###  Health Score

25

—

LowBetter than 35% of packages

Maintenance36

Infrequent updates — may be unmaintained

Popularity4

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~0 days

Total

2

Last Release

764d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/273326?v=4)[Garvin Hicking](/maintainers/garvinhicking)[@garvinhicking](https://github.com/garvinhicking)

---

Top Contributors

[![garvinhicking](https://avatars.githubusercontent.com/u/273326?v=4)](https://github.com/garvinhicking "garvinhicking (10 commits)")

### Embed Badge

![Health badge](/badges/garvinhicking-gh-validationdummy/health.svg)

```
[![Health](https://phpackages.com/badges/garvinhicking-gh-validationdummy/health.svg)](https://phpackages.com/packages/garvinhicking-gh-validationdummy)
```

###  Alternatives

[friendsoftypo3/content-blocks

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

103519.9k53](/packages/friendsoftypo3-content-blocks)[netresearch/rte-ckeditor-image

Image support in CKEditor for the TYPO3 ecosystem - by Netresearch

611.1M8](/packages/netresearch-rte-ckeditor-image)[plan2net/webp

Drop-in WebP, AVIF, and JPEG XL delivery for TYPO3 images — automatic, no URL or template changes

681.5M5](/packages/plan2net-webp)[wazum/sluggi

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

40529.5k](/packages/wazum-sluggi)[pagemachine/typo3-formlog

Form log for TYPO3

23238.6k8](/packages/pagemachine-typo3-formlog)[typo3/cms-sys-note

TYPO3 CMS System Notes - Records with messages which can be placed on any page and contain instructions or other information related to a page or section.

116.3M38](/packages/typo3-cms-sys-note)

PHPackages © 2026

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