{"id":21288992,"url":"https://github.com/hollodotme/fluidvalidator","last_synced_at":"2025-07-11T14:31:49.264Z","repository":{"id":56985435,"uuid":"50724155","full_name":"hollodotme/FluidValidator","owner":"hollodotme","description":"Validating values with a fluent interfaced class","archived":false,"fork":false,"pushed_at":"2016-04-03T21:12:36.000Z","size":53,"stargazers_count":9,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2023-12-19T15:01:47.833Z","etag":null,"topics":["fluent","message-collector","php","validator"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hollodotme.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2016-01-30T12:34:33.000Z","updated_at":"2022-12-05T09:10:21.000Z","dependencies_parsed_at":"2022-08-21T12:20:26.415Z","dependency_job_id":null,"html_url":"https://github.com/hollodotme/FluidValidator","commit_stats":null,"previous_names":[],"tags_count":5,"template":null,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hollodotme%2FFluidValidator","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hollodotme%2FFluidValidator/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hollodotme%2FFluidValidator/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hollodotme%2FFluidValidator/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hollodotme","download_url":"https://codeload.github.com/hollodotme/FluidValidator/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":225730438,"owners_count":17515289,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["fluent","message-collector","php","validator"],"created_at":"2024-11-21T12:32:58.741Z","updated_at":"2024-11-21T12:32:59.533Z","avatar_url":"https://github.com/hollodotme.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![Build Status](https://travis-ci.org/hollodotme/FluidValidator.svg?branch=master)](https://travis-ci.org/hollodotme/FluidValidator)\n[![Coverage Status](https://coveralls.io/repos/hollodotme/FluidValidator/badge.svg?branch=master\u0026service=github)](https://coveralls.io/github/hollodotme/FluidValidator?branch=master)\n[![Latest Stable Version](https://poser.pugx.org/hollodotme/fluid-validator/v/stable)](https://packagist.org/packages/hollodotme/fluid-validator) \n[![Total Downloads](https://poser.pugx.org/hollodotme/fluid-validator/downloads)](https://packagist.org/packages/hollodotme/fluid-validator) \n[![Latest Unstable Version](https://poser.pugx.org/hollodotme/fluid-validator/v/unstable)](https://packagist.org/packages/hollodotme/fluid-validator) \n[![License](https://poser.pugx.org/hollodotme/fluid-validator/license)](https://packagist.org/packages/hollodotme/fluid-validator)\n\n# FluidValidator\n\nValidating data with a fluent interfaced class\n\n**[Read more about this approach on my blog post.](http://bit.ly/FluValEn)**\n\n## Requirements\n\n* PHP \u003e= 5.5\n* [intl extension](http://php.net/manual/en/book.intl.php)\n\n## Installation\n\n```\ncomposer require \"hollodotme/fluid-validator\" \"~1.4.0\"\n```\n\n## Available validation methods\n\n```php\npublic function isString( $value, $message ) : FluidValidator;\npublic function isStringOrNull( $value, $message ) : FluidValidator;\npublic function isNonEmptyString( $value, $message ) : FluidValidator;\npublic function isNonEmptyStringOrNull( $value, $message ) : FluidValidator;\npublic function isNotEmpty( $value, $message ) : FluidValidator;\npublic function isNotEmptyOrNull( $value, $message ) : FluidValidator;\npublic function isArray( $value, $message ) : FluidValidator;\npublic function isArrayOrNull( $value, $message ) : FluidValidator;\npublic function isInt( $value, $message ) : FluidValidator;\npublic function isIntOrNull( $value, $message ) : FluidValidator;\npublic function isIntInRange( $value, array $range, $message ) : FluidValidator;\npublic function isIntInRangeOrNull( $value, array $range, $message ) : FluidValidator;\npublic function isOneStringOf( $value, array $list, $message ) : FluidValidator;\npublic function isOneStringOfOrNull( $value, array $list, $message ) : FluidValidator;\npublic function isSubsetOf( $values, array $list, $message ) : FluidValidator;\npublic function isSubsetOfOrNull( $values, array $list, $message ) : FluidValidator;\npublic function isUuid( $value, $message ) : FluidValidator;\npublic function isUuidOrNull( $value, $message ) : FluidValidator;\npublic function isEqual( $value1, $value2, $message ) : FluidValidator;\npublic function isNotEqual( $value1, $value2, $message ) : FluidValidator;\npublic function isSame( $value1, $value2, $message ) : FluidValidator;\npublic function isNotSame( $value1, $value2, $message ) : FluidValidator;\npublic function isNull( $value, $message ) : FluidValidator;\npublic function isNotNull( $value, $message ) : FluidValidator;\npublic function matchesRegex( $value, $regex, $message ) : FluidValidator;\npublic function matchesRegexOrNull( $value, $regex, $message ) : FluidValidator;\npublic function hasLength( $value, $length, $message ) : FluidValidator;\npublic function hasLengthOrNull( $value, $length, $message ) : FluidValidator;\npublic function hasMinLength( $value, $minLength, $message ) : FluidValidator;\npublic function hasMinLengthOrNull( $value, $minLength, $message ) : FluidValidator;\npublic function hasMaxLength( $value, $maxLength, $message ) : FluidValidator;\npublic function hasMaxLengthOrNull( $value, $maxLength, $message ) : FluidValidator;\npublic function counts( $values, $count, $message ) : FluidValidator;\npublic function countsOrNull( $values, $count, $message ) : FluidValidator;\npublic function isEmail( $value, $message ) : FluidValidator;\npublic function isEmailOrNull( $value, $message ) : FluidValidator;\npublic function isUrl( $value, $message ) : FluidValidator;\npublic function isUrlNull( $value, $message ) : FluidValidator;\npublic function isJson( $value, $message ) : FluidValidator;\npublic function isJsonOrNull( $value, $message ) : FluidValidator;\npublic function hasKey( $values, $key, $message ) : FluidValidator;\npublic function hasKeyOrNull( $values, $key, $message ) : FluidValidator;\npublic function isDate( $dateString, $format = 'Y-m-d', $message ) : FluidValidator;\npublic function isDateOrNull( $dateString, $format = 'Y-m-d', $message ) : FluidValidator;\npublic function isTrue( $value, $message ) : FluidValidator;\npublic function isTrueOrNull( $value, $message ) : FluidValidator;\npublic function isFalse( $value, $message ) : FluidValidator;\npublic function isFalseOrNull( $value, $message ) : FluidValidator;\n```\n\n## Conditional methods\n\nAlvailable since version `1.1.0`:\n\n```php\npublic function checkIf( $expression, $continue ) : FluidValidator;\npublic function ifIsString( $value, $continue ) : FluidValidator;\npublic function ifIsStringOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsNonEmptyString( $value, $continue ) : FluidValidator;\npublic function ifIsNonEmptyStringOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsNotEmpty( $value, $continue ) : FluidValidator;\npublic function ifIsNotEmptyOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsArray( $value, $continue ) : FluidValidator;\npublic function ifIsArrayOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsInt( $value, $continue ) : FluidValidator;\npublic function ifIsIntOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsIntInRange( $value, array $range, $continue ) : FluidValidator;\npublic function ifIsIntInRangeOrNull( $value, array $range, $continue ) : FluidValidator;\npublic function ifIsOneStringOf( $value, array $list, $continue ) : FluidValidator;\npublic function ifIsOneStringOfOrNull( $value, array $list, $continue ) : FluidValidator;\npublic function ifIsSubsetOf( $values, array $list, $continue ) : FluidValidator;\npublic function ifIsSubsetOfOrNull( $values, array $list, $continue ) : FluidValidator;\npublic function ifIsUuid( $value, $continue ) : FluidValidator;\npublic function ifIsUuidOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsEqual( $value1, $value2, $continue ) : FluidValidator;\npublic function ifIsNotEqual( $value1, $value2, $continue ) : FluidValidator;\npublic function ifIsSame( $value1, $value2, $continue ) : FluidValidator;\npublic function ifIsNotSame( $value1, $value2, $continue ) : FluidValidator;\npublic function ifIsNull( $value, $continue ) : FluidValidator;\npublic function ifIsNotNull( $value, $continue ) : FluidValidator;\npublic function ifMatchesRegex( $value, $regex, $continue ) : FluidValidator;\npublic function ifMatchesRegexOrNull( $value, $regex, $continue ) : FluidValidator;\npublic function ifHasLength( $value, $length, $continue ) : FluidValidator;\npublic function ifHasLengthOrNull( $value, $length, $continue ) : FluidValidator;\npublic function ifHasMinLength( $value, $minLength, $continue ) : FluidValidator;\npublic function ifHasMinLengthOrNull( $value, $minLength, $continue ) : FluidValidator;\npublic function ifHasMaxLength( $value, $maxLength, $continue ) : FluidValidator;\npublic function ifHasMaxLengthOrNull( $value, $maxLength, $continue ) : FluidValidator;\npublic function ifCounts( $values, $count, $continue ) : FluidValidator;\npublic function ifCountsOrNull( $values, $count, $continue ) : FluidValidator;\npublic function ifIsEmail( $value, $continue ) : FluidValidator;\npublic function ifIsEmailOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsUrl( $value, $continue ) : FluidValidator;\npublic function ifIsUrlNull( $value, $continue ) : FluidValidator;\npublic function ifIsJson( $value, $continue ) : FluidValidator;\npublic function ifIsJsonOrNull( $value, $continue ) : FluidValidator;\npublic function ifHasKey( $values, $key, $continue ) : FluidValidator;\npublic function ifHasKeyOrNull( $values, $key, $continue ) : FluidValidator;\npublic function ifIsDate( $dateString, $format = 'Y-m-d', $continue ) : FluidValidator;\npublic function ifIsDateOrNull( $dateString, $format = 'Y-m-d', $continue ) : FluidValidator;\npublic function ifIsTrue( $value, $continue ) : FluidValidator;\npublic function ifIsTrueOrNull( $value, $continue ) : FluidValidator;\npublic function ifIsFalse( $value, $continue ) : FluidValidator;\npublic function ifIsFalseOrNull( $value, $continue ) : FluidValidator;\n```\n\nAvailable since version `1.3.0`:\n\n```php\npublic function ifPassed( $continue ) : FluidValidator;\n```\n\n## Non-validation methods\n\n```php\n# Resets the validator to its initial state\npublic function reset() : FluidValidator;\n\n# Returns TRUE, if all validations have passed, otherwise FALSE\npublic function passed() : bool;\n\n# Returns TRUE, if one or more validations have failed, otherwise FALSE\npublic function failed() : bool;\n\n# Returns the the value for $var from data provider, or $var if no data provider is set.\npublic function getValue( $var ) : mixed;\n\n# Returns an array of messages collected from failed validations\npublic function getMessages() : array;\n```\n\n## Available validation modes\n\n```php\n# Processes all validations regardless of failed ones\nCheckMode::CONTINUOUS\n\n# Processes all validations until the first one failed\nCheckMode::STOP_ON_FIRST_FAIL\n```\n\n## Available message collectors\n\n* `ScalarListMessageCollector` for collecting scalar message values (default, if none is provided)\n* `GroupedListMessageCollector` for collecting scalar key / scalar value messages grouped by key\n\n## Basic usage\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\CheckMode;\nuse hollodotme\\FluidValidator\\FluidValidator;\n\n$stringValue       = 'test';\n$arrayValue        = [ 'test', 'test2' ];\n$invalidEmail      = 'email@example@example.com';\n$optionalBirthdate = null;\n\n$validator = new FluidValidator( CheckMode::CONTINUOUS );\n\n$validator-\u003eisNonEmptyString( $stringValue, 'This is not a string' )\n          -\u003eisArray( $arrayValue, 'Not an array' )\n          -\u003eisOneStringOf( $stringValue, $arrayValue, 'Is not part of the array' )\n          -\u003eisEmail( $invalidEmail, 'This email address is invalid' )\n          -\u003eisDateOrNull( $optionalBirthdate, 'Y-m-d', 'Birthdate is invalid' );\n\nif ( $validator-\u003efailed() )\n{\n\tprint_r( $validator-\u003egetMessages() );\n}\n```\n\nPrints:\n\n```\nArray\n(\n    [0] =\u003e This email address is invalid\n)\n```\n\n## Conditional skip of checks\n\nAvailable since version `1.1.0`.\n\nYou often want to check a value only if a previous condition is true. \nTherefore the generic `checkIf` method was added, alongside with if-methods for each check method.\n \n**Example:**\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\CheckMode;\nuse hollodotme\\FluidValidator\\FluidValidator;\n\n$stringValue    = 'test';\n$arrayValue     = [ 'test', 'test2' ];\n$invalidEmail   = 'email@example@example.com';\n$birthdate \t\t= 'not-a-date';\n\n$validator = new FluidValidator( CheckMode::CONTINUOUS );\n\n$validator-\u003eisNonEmptyString( $stringValue, 'This is not a string' )\n          -\u003eisArray( $arrayValue, 'Not an array' )\n          -\u003eisOneStringOf( $stringValue, $arrayValue, 'Is not part of the array' )\n          # execute next 2 check methods, if $birthdate is a non-empty string\n          # skip next 2 check methods otherwise\n          -\u003eifIsNonEmptyString( $birthdate, 2 ) \n          -\u003eisEqual( $birthdate, 'not-a-date', 'Is not equal' )\n          -\u003eisDate( $birthdate, 'Y-m-d', 'Birthdate is invalid' )\n          -\u003eisEmail( $invalidEmail, 'This email address is invalid' )\n          # execute next 1 check method, if all previous checks passed so far\n          # skip next 1 check method otherwise\n          -\u003eifPassed( 1 )\n          -\u003eisNonEmptyString( '', 'String is empty' )\n          -\u003eisEqual( 'testing', $stringValue, 'Strings are not equal' );\n\nif ( $validator-\u003efailed() )\n{\n\tprint_r( $validator-\u003egetMessages() );\n}\n```\n\n**Prints:**\n\n```\nArray\n(\n    [0] =\u003e Birthdate is invalid\n    [1] =\u003e This email address is invalid\n    [2] =\u003e Strings are not equal\n)\n```\n\n## Usage with data provider\n\nIf you have an object covering a data structure like an array or something like that, e.g. a request object, \nyou can tell the `FluidValidator` to use this object to retrieve the values to validate from it.\n\nAll you need to do is to implement the `hollodotme\\FluidValidator\\Interfaces\\ProvidesValuesToValidate` \ninterface' method `getValueToValidate( $key )`.\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\FluidValidator;\nuse hollodotme\\FluidValidator\\CheckMode;\nuse hollodotme\\FluidValidator\\Interfaces\\ProvidesValuesToValidate;\n\nclass Request implements ProvidesValuesToValidate\n{\n\t/** @var array */\n\tprivate $requestData;\n\n\t/**\n\t * @param array $requestData\n\t */\n\tpublic function __construct( array $requestData )\n\t{\n\t\t$this-\u003erequestData = $requestData;\n\t}\n\n\t/*\n\n\t... some accessor methods\n\n\t*/\n\n\t/**\n\t * Implements the ProvidesValuesToValidate interface\n\t *\n\t * @param mixed $key\n\t *\n\t * @return mixed|null\n\t */\n\tpublic function getValueToValidate( $key )\n\t{\n\t\treturn isset($this-\u003erequestData[ $key ]) ? $this-\u003erequestData[ $key ] : null;\n\t}\n}\n\n$requestData = [\n\t'name'      =\u003e 'Your Name',\n\t'language'  =\u003e 'de',\n\t'email'     =\u003e 'email@example@example.com',\n\t'birthdate' =\u003e '1980-01-01',\n];\n\n$request   = new Request( $requestData );\n$validator = new FluidValidator( CheckMode::CONTINUOUS, $request );\n\n$validator-\u003eisNonEmptyString( 'name', 'Name is empty.' )\n          -\u003eisOneStringOf( 'language', [ 'de', 'en' ], 'Invalid language.' )\n          -\u003eisEmail( 'email', 'This email address is invalid' )\n          -\u003eisDateOrNull( 'birthdate', 'Y-m-d', 'Birthdate is invalid' );\n\nif ( $validator-\u003efailed() )\n{\n\tprint_r( $validator-\u003egetMessages() );\n}\n```\n\n## Usage with message collectors\n\nAvailable since version `1.2.0`.\n\n### ScalarListMessageCollector (default)\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\CheckMode;\nuse hollodotme\\FluidValidator\\FluidValidator;\nuse hollodotme\\FluidValidator\\MessageCollectors\\ScalarListMessageCollector;\n\n$stringValue       = 'test';\n$arrayValue        = [ 'test', 'test2' ];\n$invalidEmail      = 'email@example@example.com';\n$optionalBirthdate = null;\n\n$messageCollector = new ScalarListMessageCollector();\n$validator        = new FluidValidator( CheckMode::CONTINUOUS, null, $messageCollector );\n\n$validator-\u003eisNonEmptyString( $stringValue, 'This is not a string' )\n          -\u003eisArray( $arrayValue, 'Not an array' )\n          -\u003eisOneStringOf( $stringValue, $arrayValue, 'Is not part of the array' )\n          -\u003eisEmail( $invalidEmail, 'This email address is invalid' )\n          -\u003eisDateOrNull( $optionalBirthdate, 'Y-m-d', 'Birthdate is invalid' );\n\nif ( $validator-\u003efailed() )\n{\n\tprint_r( $validator-\u003egetMessages() );\n}\n```\n\nPrints:\n\n```\nArray\n(\n    [0] =\u003e This email address is invalid\n)\n```\n\n**Note:** Behaviour is the same as in the [basic usage](#basic-usage) example above.\n\n### GroupedListMessageCollector\n\nThis collector expects messages to be an assoc. array with scalar keys and values.\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\CheckMode;\nuse hollodotme\\FluidValidator\\FluidValidator;\nuse hollodotme\\FluidValidator\\MessageCollectors\\GroupedListMessageCollector;\n\n$stringValue       = 'test';\n$arrayValue        = [ 'test', 'test2' ];\n$invalidEmail      = 'email@example@example.com';\n$optionalBirthdate = null;\n\n$messageCollector = new GroupedListMessageCollector();\n$validator        = new FluidValidator( CheckMode::CONTINUOUS, null, $messageCollector );\n\n$validator-\u003eisNonEmptyString( '', [ 'string' =\u003e 'String is empty' ] )\n          -\u003eisArray( '', [ 'list' =\u003e 'Not an array' ] )\n          -\u003eisOneStringOf( 'test3', $arrayValue, [ 'list' =\u003e 'Is not part of the array' ] )\n          -\u003eisEmail( $invalidEmail, [ 'email' =\u003e 'This email address is invalid' ] )\n          -\u003eisDate( $optionalBirthdate, 'Y-m-d', [ 'birthdate' =\u003e 'Birthdate is invalid' ] );\n\nif ( $validator-\u003efailed() )\n{\n\tprint_r( $validator-\u003egetMessages() );\n}\n```\n\nPrints:\n\n```\nArray\n(\n    [string] =\u003e Array (\n    \t[0] =\u003e This email address is invalid\n    ),\n    [list] =\u003e Array (\n    \t[0] =\u003e Not an array\n    \t[1] =\u003e Is not part of the array\n    ),\n    [email] =\u003e Array (\n    \t[0] =\u003e This email address is invalid\n    ),\n    [birthdate] =\u003e Array (\n    \t[0] =\u003e Birthdate is invalid\n    )\n)\n```\n\n**Note:**\n\n* The \"list\" key is given twice, so 2 messages were grouped under this key. \n* The value for a group key is always an array with numeric keys\n\n### Custom message collector implementations\n\nFor a custom implementation of a message collector, simply create a class that implements \nthe `hollodotme\\FluidValidator\\Interfaces\\CollectsMessages` interface.\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\Interfaces\\CollectsMessages;\n\nclass MyMessageCollector implements CollectsMessages\n{\n\t/** @var array */\n\tprivate $messages = [];\n\n\t/**\n\t * @param mixed $message\n\t *\n\t * @return bool\n\t */\n\tpublic function isMessageValid( $message )\n\t{\n\t\t// Check for a valid type or format of your expected messages\n\t\t// Example:\n\t\t\n\t\treturn is_string( $message );\n\t}\n\n\t/**\n\t * @param mixed $message\n\t */\n\tpublic function addMessage( $message )\n\t{\n\t\t// Add a message to your collection\n\t\t// Example:\n\t\t\n\t\t$this-\u003emessages[] = $message;\n\t}\n\n\tpublic function clearMessages()\n\t{\n\t\t// Clear the message list\n\t\t// Example:\n\t\t\n\t\t$this-\u003emessages = [];\n\t}\n\n\t/**\n\t * @return array\n\t */\n\tpublic function getMessages()\n\t{\n\t\t// Provide the collected messages\n\t\t// Example:\n\t\t\n\t\treturn $this-\u003emessages;\n\t}\n}\n```\n\n### Extending FluidValidator with own checks\n\nInternally all validation and conditional methods are mapped to protected check methods returning a boolean.\n`TRUE` if the check has passed, `FALSE` otherwise.\n\nSo extending FluidValidator is very simple.\n\n#### 1. Extend the class and add a check method\n\nLet's add a method that checks for a valid postal address.\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\FluidValidator;\n\nclass MyFluidValidator extends FluidValidator\n{\n\t/**\n\t * @param string $street\n\t * @param string $streetNumber\n\t * @param string $zipCode\n\t * @param string $city\n\t *\n\t * @return bool\n\t */\n\tprotected function checkIsPostalAddress( $street, $streetNumber, $zipCode, $city )\n\t{\n\t\t$validPostalAddress = true;\n\t\t\n\t\t# Simple formal checks first\n\t\t# You can use existing check methods here\n\t\t$validPostalAddress \u0026= $this-\u003echeckIsNonEmptyString( $street );\n\t\t$validPostalAddress \u0026= $this-\u003echeckMatchesRegex( $streetNumber, \"#^[0-9a-z\\- ]$#i\" );\n\t\t$validPostalAddress \u0026= $this-\u003echeckMatchesRegex( $zipCode, \"#^[0-9]{5}$#\" );\n\t\t$validPostalAddress \u0026= $this-\u003echeckIsNonEmptyString( $city );\n\t\t\n\t\tif ( (bool)$validPostalAddress )\n\t\t{\n\t\t\t# Semantic check of postal address\n\t\t\n\t\t\t# Fetch real values, if a data provider is used...\n\t\t\t$streetValue \t\t= $this-\u003egetValue( $street );\n\t\t\t$streetNumberValue \t= $this-\u003egetValue( $streetNumber );\n\t\t\t$zipCodeValue \t\t= $this-\u003egetValue( $zipCode );\n\t\t\t$cityValue \t\t\t= $this-\u003egetValue( $city );\n\t\t\n\t\t\t# Assuming you have a postal address validator doing the semantic check\n\t\t\n\t\t\t$validator = new PostalAddressValidator( $street, $streetNumber, $zipCode, $city );\n\t\t\n\t\t\t$validPostalAddress = $validator-\u003eisValid();\n\t\t}\n\t\t\n\t\treturn (bool)$validPostalAddress;\n\t}\n}\n```\n\n#### 2. Use it for validation / conditions\n\nNow you're able to use this as a validation method with an additional message parameter \nand as a conditional method with an additional continue parameter:\n\n```php\n\u003c?php\n\n$myFluidValidator = new MyFluidValidator();\n\n# As validation method\n$myFluidValidator-\u003eisPostalAddress(\n\t'MyStreet', '123 a', '01234', 'MyCity',\n\t'Address is not valid'\n);\n\n# As conditional method\n$myFluidValidator-\u003eifIsPostalAddress(\n\t'MyStreet', '123 a', '01234', 'MyCity',\n\t3\n);\n/** Skip next 3 methods, if it is not a valid postal address **/\n```\n\n#### 3. Add method signatures\n\nTo have better auto completion in your IDE, add the relevant method signatures\nto the head phpdoc of your class.\n\n```php\n\u003c?php\n\nnamespace My\\NS;\n\nuse hollodotme\\FluidValidator\\FluidValidator;\n\n/**\n * Class MyFluidValidator\n * @package My\\NS;\n * METHODSTART\n * @method MyFluidValidator isPostalAddress($street, $streetNumber, $zipCode, $city, $message)\n * @method MyFluidValidator ifIsPostalAddress($street, $streetNumber, $zipCode, $city, $continue)\n * METHODEND\n */\nclass MyFluidValidator extends FluidValidator\n{\n    /* ... */\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhollodotme%2Ffluidvalidator","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhollodotme%2Ffluidvalidator","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhollodotme%2Ffluidvalidator/lists"}