[TYPO3-ect] tx_forms
Elmar HInz
elmar.DOT.hinz at team.MINUS.red.DOT.net
Mon Jan 15 14:47:08 CET 2007
Hello Steve,
I still didn't answer to this, because it's a lot of stuff to think about.
I will send in answer during the next days.
Regards
Elmar
Am Sat, 13 Jan 2007 02:07:24 +1100 schrieb Steve Ryan:
> Hi All,
>
> Few observations/suggestions about how I would like to see a forms lib.
> * the TCA sits at the center of a typo3 forms library. It is the
> 'official' way of describing meta data for form component types and
> validation after all.
>
> * I'm all for a fully automatic layer to the API.
> renderForm($fieldList,$TCA,$data);
> renderView($fieldList,$TCA,$data);
> renderList($fieldList,$TCA,$data)
> using
> renderFormMarkers($fieldList,$TCA,$data)
> using a more granular layer
> renderFormField($field,$TCA,$data);
> renderFormValue($field,$TCA,$data);
> using an even more granular layer
> renderRTEValue
> renderLinkValue
> renderRTEFormField
> renderRTELinkField
>
> * Sufficient granularity in the meta data based form generation API
> would allow any rendering technique from totally custom php that just
> uses the lowest levels like getRTEValue through php style templates that
> just use the marker array functions eg
> getFormMarkers($fieldList,$TCA,$data) to get the prepared and populated
> form widgets. HTML customised templates are are a popular choice that
> use markers for the generated input fields/values so the highest level
> functions need to generate default templates with markers or accept a
> filesystem template as an alternative eg
> getForm($fieldList,$TCA,$data,$template);
>
> * It is not necessarily a good idea to seperate lists and views form
> forms, they all really mash together. At least at the level of
> generating field widgets.
>
> * The TCA needs to grow to support additional field types including
> advanced relationships, javascript widgets like spreadsheets and graphs,
> more advanced validation, possibly collective field lists, search
> configuration......
>
> * A really simple extension that provides a flexform to choose a table,
> field lists and behaviour stereotype (search/list/view, admin editing,
> autosearch, create/confirm (registration) ....) would bring the forms
> lib to the wider typo3 community of non programmers.
>
> * Access control raises some difficult questions because all the fine
> grained access control settings are related to back end users but I
> imagine that a forms lib would be most popular for creating front end
> editing solutions.
>
> * Creating 'entity bean style' class files to define a persistent object
> and provide getter/setter methods seems like overkill to me. Arrays
> combined with meta data do the same job (if not so comprehensible) and
> are so much easier to reflect/treat in the abstract.
>
> * Input processing/validation and persistance functions can also be
> implemented in the abstract based on meta data.
> processDataValue($field,$TCA,$data);
> processDataValues($fieldList,$TCA,$data);
> validate($fieldList,$TCA,$data);
> validateField($field,$TCA,$data);
> validateEmail($data)
> I'm not sure if these functions should be split into seperate libraries
> as they are quite interdependant around the internal structure of the
> data array.
>
> * Somehow I feel like I am at odds with good 'object orientated' design
> as this approach does not use any of the cascading aspects of objects
> which facilitate reusability and extensibility. Particularly when it
> comes to adding additional field types, the entire validateField method
> would need to be overridden. Perhaps this could be overcome with a
> configuration array mapping TCA.config.type to a function ??????
>
>
> * Control structures take many different forms, from extremely simple
> list/view requirements where everything can be done in 5 lines of php in
> the main plugin class through to struts style controllers based on
> cascading control classes tied together with configuration that assists
> in the interpretation of command parameters. A forms library should be
> useful in all these cases.
>
>
> In summary, what do you think about an API that goes something like the
> following.
>
> * class tx_forms.renderer.php {
> // render form fields, values, combined form/list components from meta data
> renderForm($fieldList,$TCA,$data);
> renderView($fieldList,$TCA,$data);
> renderList($fieldList,$TCA,$data) ;
> renderSearchForm($TCA,$searchCriteria)
>
> renderFormMarkers($fieldList,$TCA,$data)
> renderFormField($field,$TCA,$data);
> renderFormValue($field,$TCA,$data);
>
> renderRTEValue
> renderLinkValue
> .....
> renderRTEFormField
> renderRTELinkField
> .....
> }
>
> * class tx_forms.inputprocessing.php {
> // capture post variable input and convert it into a format suitable
> for internal storage/persistence.
> processDataValue($field,$TCA,$data);
> processDataValues($fieldList,$TCA,$data);
> }
> * class tx_forms.dataprep.php {
> // convert the internal representation of entity from what is loaded by
> the database to something suitable to pass to the rendering classes. For
> example converting lookup ids into strings.
>
> }
> * class tx_forms.validation.php {
> // validation based on TCA meta data
> validate($fieldList,$TCA,$data);
>
> validateField($field,$TCA,$data);
>
> validateEmail($data)
> .......
> }
>
>
> // because there are potentially many data stores, the persistence class
> hierarchy should start abstract. I feel the rendering, input processing,
> data prep and validation can be implemented in 'the one true way' based
> on the TCA
> // there is a strong argument that the persistence classes belong in a
> different extension. The reason I suggest combining them into tx_forms
> is the cohesion/interdependance that is created by the 'standard format'
> of the internal data storage. perhaps an argument for entity bean style.
> * abstract class tx_forms.persistence.php {
> // save/load/search assisted by meta data, TCA extensions required for
> search configuration
> save($fieldList,$TCA,$data)
> load($fieldList,$TCA,$uid)
> delete($TCA,$data)
> search($searchConfig,$searchCriteria)
> }
> * class tx_forms.mysql_persistence.php implements tx_forms.persistence{
> save($fieldList,$TCA,$data)
> load($fieldList,$TCA,$uid)
> delete($TCA,$data)
> search($searchConfig,$searchCriteria)
> }
>
> I have a vested interest in this topic. With some friends I look after
> the admin_interface extension which is essentially a forms lib.
> It is rooted in fe_adminLib.inc as are many of the existing forms lib
> extensions however I started by ripping the code to generate form
> components and parse form input and then went my own way.
> It probably wouldn't pass muster for great coding style but I have been
> working toward improving that. Recently split the whole thing up from a
> monolith to MVC, more work to do there removing interdependance between
> the components. There are a few of us here in Bega that are very keen to
> continue to refactor the code base until it is a tidy and reusable
> library that could be used for tx_forms.
>
> I expect we will be working toward something like this inside the next
> month. Much of the TCA rendering functionality is already done.
> I'd really appreciate comments and feedback about the structure I am
> proposing.
>
>
> cheers
>
> Steve Ryan
> stever at syntithenai.com
More information about the TYPO3-team-extension-coordination
mailing list