Skip to content

Conditional filtering #54

Description

@vova07

Hi there again,
Thanks for nice filter tool.

Will try to be short, here is my problem:

What

$validator = new Validator();
$validator->required('title')->string()->lengthBetween(0, 255);
$validator->optional('slug')->string()->lengthBetween(0, 255);

$filter = new Filter();
$filter->value('slug')->slug('title');

$data = [
  'title' => 'Test title',
  'slug' => 'test-slug',
];

$result = $validator->validate($data);
$values = $filter->filter($result->getValues());

var_dump($values);

/*
[
  'title' => 'Test title',
  'slug' => 'testslug'
]

'slug' => 'testslug' instead of 'slug' => 'test-slug' because slug filter is call any time even if `slug` value is set.
*/

What is expected

$validator = new Validator();
$validator->required('title')->string()->lengthBetween(0, 255);
$validator->optional('slug')->string()->lengthBetween(0, 255);

$filter = new Filter();
$filter->value('slug')->skip(function ($value) { return !empty($value); })->slug('title');

$data = [
  'title' => 'Test title',
  'slug' => 'test-slug',
];

$result = $validator->validate($data);
$values = $filter->filter($result->getValues());

var_dump($values);

/*
[
  'title' => 'Test title',
  'slug' => 'test-slug'
]
*/

My suggestion is to add something that will give a possibility to skip filtering when value for filtered key is set, or maybe for any condition.
I know that filter is call to filter, but without own code we cannot obtain wondered behavior.

If I miss something please share a link to solution.

Thanks!

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions