Giter Club home page Giter Club logo

Comments (5)

thewilkybarkid avatar thewilkybarkid commented on May 23, 2024

Could you share an example form where you're trying to do this? (And where you're wanting the message to appear?)

from phone-number-bundle.

rafaelschmitt avatar rafaelschmitt commented on May 23, 2024

We have following Form:
CreateAdvertType with field 'contact'
$builder->add('contact', new ContactType(), array(
...ContactType with field 'phone'
$builder->add('phone', new PhoneType(), array(
...PhoneType with field 'phone_number' and 'country_code'. We put this two input-values together to one String with DataTransformer. So our 'phone' field in 'ContactType' has (after DataTransforming) a string value e.g. "+49 821 635449"

in our validation.yml:

contact:
            - Collection:
                groups: [x,y]
                fields:
                    phone:
                        - NotBlank: { groups: [x,y], message: 'advert.phone_blank' }
                        - Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumber: { groups: [x,y], message: 'advert.phone_invalid' }

so the 'phone' that contains (after DataTransforming) a string e.g. "+49 821 635449" will be validated. Because 'phone' is a Collection (and not a form field) the violation message won´t be automatically binded to 'phone'. Instead we want force the violation message to appear under the 'phone_number' form field.

To do this, we have to use this line of code:
$this->context->addViolationAt('[phone_number]', $constraint->message);
instead of
https://github.com/misd-service-development/phone-number-bundle/blob/master/Validator/Constraints/PhoneNumberValidator.php#L98

For this we make our own 'PhoneIsValidValidator' (and use it in validation.yml) that extends Misd\PhoneNumberBundle\Validator\Constraints\PhoneNumberValidator and just overwrite your 'addViolation' wrapper-method. But this method is private so we cant overwrite it. For Testing we changed this in your code to protected and everything works fine and as expected.

So it would be nice when you let this method be overwritten so the validator would be more flexible

from phone-number-bundle.

thewilkybarkid avatar thewilkybarkid commented on May 23, 2024

I see, so you've basically created a different widget for input.

Can I ask why you've done this? Is it so you can control the countries that it accepts? (If so see #14.) Or just to change the way the form is displayed?

Extending the constraints isn't really something that should be done (since it should be unnecessary). Instead, the bundle should allow restricting the list of countries (#14) and possibly also allow single_text and country_choice widget options (not sure about the best name for the latter). That should cover what I think you're trying to do!

from phone-number-bundle.

rafaelschmitt avatar rafaelschmitt commented on May 23, 2024

Yes, we use a different widget for input.

Our main goal with that is not to restrict specific country_codes. The thing because we split the 'phone' field in to 'country_code' and 'phone_number' is that we dont want every user of our application to know his country_code (we think the most dont know it). Instead we make the 'phone_number' a text-field and 'country_code' field a select-box where the user can easily choose his country_code. The options of this select-box will be set in our config.yml and look like this: e.g. "(AT) +43" or "(DE) +49". The side effect of this is that we can also control the country_codes that we accept, but is not our main goal with this.

Simply said:
we just want a select-box where users can choose a country_code (e.g. value="+49"), and a text-field where the user can type in his phone_number(e.g. "821 85496"). This two values should be then put together to one string (e.g. "+49 821 85496"). This string we want to validate over your Validation. (until this point everything works like we want). If string is invalid, we want the violation message to apper directly under the text-field, where the user types in his phone_number.

Currently it adds the violation message to form_errors(form) and not to the field.

from phone-number-bundle.

rafaelschmitt avatar rafaelschmitt commented on May 23, 2024

very nice! thx

from phone-number-bundle.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.