Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/phpdevcommunity/php-options-resolver
This library provides a simple solution for processing and validating option arrays in PHP.
https://github.com/phpdevcommunity/php-options-resolver
component library option-parser parameter php php7 poo
Last synced: about 14 hours ago
JSON representation
This library provides a simple solution for processing and validating option arrays in PHP.
- Host: GitHub
- URL: https://github.com/phpdevcommunity/php-options-resolver
- Owner: phpdevcommunity
- License: mit
- Created: 2021-06-12T20:05:00.000Z (over 3 years ago)
- Default Branch: main
- Last Pushed: 2024-04-07T11:42:41.000Z (6 months ago)
- Last Synced: 2024-09-18T15:51:53.797Z (7 days ago)
- Topics: component, library, option-parser, parameter, php, php7, poo
- Language: PHP
- Homepage:
- Size: 23.4 KB
- Stars: 5
- Watchers: 1
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Option Array Processing and Validation Library
This library provides a simple solution for processing and validating option arrays in PHP.
[![Latest Stable Version](http://poser.pugx.org/devcoder-xyz/php-options-resolver/v)](https://packagist.org/packages/devcoder-xyz/php-options-resolver)
[![Total Downloads](http://poser.pugx.org/devcoder-xyz/php-options-resolver/downloads)](https://packagist.org/packages/devcoder-xyz/php-options-resolver)
[![Latest Unstable Version](http://poser.pugx.org/devcoder-xyz/php-options-resolver/v/unstable)](https://packagist.org/packages/devcoder-xyz/php-options-resolver)
[![License](http://poser.pugx.org/devcoder-xyz/php-options-resolver/license)](https://packagist.org/packages/devcoder-xyz/php-options-resolver)## Installation
To install this library, use [Composer](https://getcomposer.org/)
### Run the following Composer command:
```bash
composer require devcoder-xyz/php-options-resolver
```## Requirements
* PHP version 7.4 or higher
### Defining Required Options
Define the required options for your class using `OptionsResolver` with the expected options:
```php
options = $resolver->resolve($options);
} catch (InvalidArgumentException $e) {
throw new InvalidArgumentException("Error: " . $e->getMessage());
}
}
}// Example usage:
try {
$database = new Database([
'host' => 'localhost',
'dbname' => 'app',
]);
} catch (InvalidArgumentException $e) {
echo "Error: " . $e->getMessage(); // Displays: "Error: The required option 'username' is missing."
}
```### Defining Default Options
You can also set default values for your options using `setDefaultValue` for each option:
```php
setDefaultValue('localhost'),
(new Option('username'))->setDefaultValue('root'),
(new Option('password'))->setDefaultValue('root'),
(new Option('dbname'))->setDefaultValue('app'),
]);$this->options = $resolver->resolve($options);
}
}// Example usage:
$database = new Database([]);
var_dump($database->getOptions());
// Expected output:
// array(4) {
// ["host"]=> string(9) "localhost"
// ["username"]=> string(4) "root"
// ["password"]=> string(4) "root"
// ["dbname"]=> string(3) "app"
// }
```### Handling Non-existent Options
If a provided option does not exist in the defined list of options, an `InvalidArgumentException` will be thrown:
```php
setDefaultValue('localhost'),
(new Option('username'))->setDefaultValue('root'),
(new Option('password'))->setDefaultValue('root'),
(new Option('dbname'))->setDefaultValue('app'),
]);try {
$this->options = $resolver->resolve($options);
} catch (InvalidArgumentException $e) {
throw new InvalidArgumentException("Error: " . $e->getMessage());
}
}
}// Example usage:
try {
$database = new Database([
'url' => 'mysql://root:root@localhost/app',
]);
} catch (InvalidArgumentException $e) {
echo "Error: " . $e->getMessage(); // Displays: "Error: The option(s) 'url' do(es) not exist. Defined options are: 'host', 'username', 'password', 'dbname'."
}
```### Validating Option Values
You can add custom validators for each option to validate the provided values:
```php
validator(static function($value) {
return is_string($value);
})->setDefaultValue('localhost'),(new Option('username'))->validator(static function($value) {
return is_string($value);
})->setDefaultValue('root'),(new Option('password'))->validator(static function($value) {
return is_string($value);
})->setDefaultValue('root'),(new Option('dbname'))->validator(static function($value) {
return is_string($value);
})->setDefaultValue('app'),(new Option('driver'))->validator(static function($value) {
return in_array($value, ['pdo_mysql', 'pdo_pgsql']);
})->setDefaultValue('pdo_mysql'),
]);try {
$this->options = $resolver->resolve($options);
} catch (InvalidArgumentException $e) {
throw new InvalidArgumentException("Error: " . $e->getMessage());
}
}
}// Example usage with an invalid driver value:
try {
$database = new Database([
'host' => '192.168.1.200',
'username' => 'root',
'password' => 'root',
'dbname' => 'my-app',
'driver' => 'pdo_sqlite',
]);
} catch (InvalidArgumentException $e) {
echo "Error: " . $e->getMessage(); // Displays: "Error: The option 'driver' with value 'pdo_sqlite' is invalid."
}
```Certainly! Let's focus specifically on the use of `Option::new()` to instantiate options in a fluent manner:
---
## Instantiating Options with `Option::new()`
You can use `Option::new()` to create and configure option instances in a fluent style before adding them to the `OptionsResolver`. Here's an example that demonstrates this approach:
```php
setDefaultValue('default');// Create a resolver and add the configured options
$resolver = new OptionsResolver([$option1, $option2]);// Resolve the options with provided values
$options = $resolver->resolve([
'option1' => 'value1',
]);```
In this example:
- We use `Option::new('option1')` to create an `Option` instance named `'option1'`.
- Similarly, we use `Option::new('option2')->setDefaultValue('default')` to create an `Option` instance named `'option2'` with a default value of `'default'`.
- Both options are then added to the `OptionsResolver` when it's instantiated.
- Finally, we resolve the options by passing an array of values, and only `'option1'` is provided with a value (`'value1'`).Using `Option::new()` provides a concise and clear way to create and configure option instances before resolving them with specific values.
---
This library is ideal for small projects where you need to manage and validate options in a simple and effective way.