Hi, today I started to convert some of my forms to use UserInput. Generally this is a great component. But there are two major show stoppers in my eyes that force a programmer to write a lot of unnecessary duplicate code. And surprisingly there are already two issues for them:
#012345: ezcInputForm->isValid() http://issues.ez.no/IssueView.php?Id=12345&activeItem=3 #011394: UserInput::emptyValue http://issues.ez.no/IssueView.php?Id=11394&activeItem=2 Without these two little features it's really annoying as you have to check also the case of a valid form with an additional foreach loop. "if( empty( $form->getInvalidProperties() ) )" works only if you allow empty strings and is still ugly as the bug reporter already notes in issue #012345. I also like to have "require_string" as a filter_type: In my eyes it does not make sense to add callbacks for this but instead only strip the 'require_' part of the filter name and check the result afterwards: $checkEmpty = false; $filterName = $inputElement->filterName; if ( substr( $filterName, 0, 8 ) === 'require_' ) { $checkEmpty = true; $filterName = substr( $filterName, 8 ); } // filter_input call ... if ( ( $value !== null && $checkEmpty === false ) || ( $value !== null && !empty( $value ) ) ) { $this->properties[$elementName] = ezcInputForm::VALID; // ... This way the require can also be used to require other filters that output an empty string and not NULL and it doesn't add too much complexity. The usage of "require_" could of course also be restricted to them to make the usage clearer. With these two issues fixed the component is more intuitive to use: if ( $form->isValid() ) { // submit to db ... } else { // form is not valid, send data to template of this form ... $properties = array(); $warnings = array(); foreach ( $definition as $name => $dummy ) { if ( $form->hasValidData( $name ) ) { $properties[$name] = $form->$name; } else { $properties[$name] = htmlspecialchars( $form->getUnsafeRawData( $name ) ); $warnings[$name] = 'invalid_form'; } } } I know it's already late in the release cycle for the 2008.1 release but could these two still make it into the next release? The code changes are really small and also no existing APIs are touched. Regards Andi -- Components mailing list [email protected] http://lists.ez.no/mailman/listinfo/components
