Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

A DateTime filter #1

Open
weierophinney opened this issue Dec 31, 2019 · 10 comments
Open

A DateTime filter #1

weierophinney opened this issue Dec 31, 2019 · 10 comments

Comments

@weierophinney
Copy link
Member

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


Originally posted by @gszy at zendframework/zend-filter#85

@weierophinney
Copy link
Member Author

@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


Originally posted by @froschdesign at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

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


Originally posted by @gszy at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

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


The following filtering is support:

  • string to DateTime
  • string to DateTimeImmutable
  • DateTime to DateTimeImmutable
  • DateTimeImmutable to DateTime

Is this correct or did I forget something?


Originally posted by @froschdesign at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

  • 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.


Originally posted by @gszy at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

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:

  • DateTime to DateTime (new object, $immutable === false)
  • DateTime to DateTimeImmutable (new object, $immutable === true)
  • DateTimeImmutable to DateTime (new object, $immutable === false)
  • DateTimeImmutable to DateTimeImmutable (new object, $immutable === true)

Originally posted by @froschdesign at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

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:

  • DateTimeDateTime
  • DateTimeDateTimeImmutable
  • DateTimeImmutableDateTime
  • DateTimeImmutableDateTimeImmutable
  • stringDateTime
  • stringDateTimeImmutable

Originally posted by @gszy at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

@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.

  • DateTimeDateTime
  • DateTimeImmutableDateTimeImmutable

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!


Originally posted by @froschdesign at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

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.

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

  • DateTimeDateTime
  • DateTimeImmutableDateTimeImmutable

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.


Originally posted by @gszy at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

@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


Originally posted by @froschdesign at zendframework/zend-filter#85 (comment)

@weierophinney
Copy link
Member Author

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


Originally posted by @gszy at zendframework/zend-filter#85 (comment)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant