zendframework / zend-filter

Filter component from Zend Framework
BSD 3-Clause "New" or "Revised" License
68 stars 36 forks source link

A DateTime filter #85

Open gszy opened 5 years ago

gszy commented 5 years ago

This is a new filter that returns DateTime or (if desired) DateTimeImmutable instances.

froschdesign commented 5 years ago

@gscscnd Thank you for the pull request and contribution, but did you see the filter DateTimeFormatter?

https://github.com/zendframework/zend-filter/blob/master/src/DateTimeFormatter.php

gszy commented 5 years ago

@froschdesign, it seems that DateTimeFormatter returns a string, while I would like to receive DateTimeInterface.

froschdesign commented 5 years ago

@gscscnd You are right. (Never read on phone in the sun! 🤦‍♂️ )


The following filtering is support:

Is this correct or did I forget something?

gszy commented 5 years ago
  • string to DateTime
  • string to DateTimeImmutable

Actually I don’t check if a string was provided, just pass it to DateTime/DateTimeImmutable constructor.

  • DateTime to DateTimeImmutable
  • DateTimeImmutable to DateTime

Also DateTime to DateTime and similarly for immutable.

froschdesign commented 5 years ago

We have to explicitly define all possible values for the filtering - input and ouput. Otherwise, we can not write the full documentation and all required unit tests.

Also DateTime to DateTime and similarly for immutable.

This means:

gszy commented 5 years ago

We can throw an InvalidArgumentException if the user provides something other than DateTimeInterface|string. The user can provide a valid string that at the same time (ahem) is not a valid datetime, but it’s probably Date Validator’s responsibility.

Anyway:

froschdesign commented 5 years ago

@gscscnd

We can throw an InvalidArgumentException if the user provides something other than DateTimeInterface|string.

No exceptions are allowed during the process of filtering. If the given value can not be handled by the filter, the value should be returned unfiltered.

  • DateTime → DateTime
  • DateTimeImmutable → DateTimeImmutable

Does the filter create a new object each time or will the same object returned?


Can you describe the typical use case for this filter? Thanks!

gszy commented 5 years ago

No exceptions are allowed during the process of filtering. If the given value can not be handled by the filter, the value should be returned unfiltered.

:ok:, will fix that. (Current code doesn’t throw exceptions explicitly, but setting $value to int will surely cause the DateTime constructor to throw.)

  • DateTime → DateTime
  • DateTimeImmutable → DateTimeImmutable

Does the filter create a new object each time or will the same object returned?

Returns the same instance.

Can you describe the typical use case for this filter? Thanks!

I’ve got a form (or any array of data, for that matter) with a datetime­‑like input and an entity with a datetime­‑like property. I setup an InputFilter with a Date validator and a DateTime filter. The input array contains 2019-04-25T08:02 (string) and the (hydrated) output object has instance of DateTimeInterface.

froschdesign commented 5 years ago

@gscscnd

The input array contains 2019-04-25T08:02 (string) and the (hydrated) output object has instance of DateTimeInterface.

If you use zend-hydrator already then you can use Zend\Hydrator\Strategy\DateTimeFormatterStrategy to get the desired result. Have you tried this strategy?

https://docs.zendframework.com/zend-hydrator/v3/strategy/#zend92hydrator92strategy92datetimeformatterstrategy

gszy commented 5 years ago

Well, I didn’t know about it. Thanks for the pointer!

weierophinney commented 4 years ago

This repository has been closed and moved to laminas/laminas-filter; a new issue has been opened at https://github.com/laminas/laminas-filter/issues/1.

weierophinney commented 4 years ago

This repository has been moved to laminas/laminas-filter. If you feel that this patch is still relevant, please re-open against that repository, and reference this issue. To re-open, we suggest the following workflow: