Feature #9514
Support explicit Array Arguments for ViewHelpers
Status: | New | Start date: | 2010-08-30 | |
---|---|---|---|---|
Priority: | Should have | Due date: | ||
Assigned To: | - | % Done: | 0% |
|
Category: | - | |||
Target version: | - | |||
Has patch: |
Description
We have been brainstorming over some additions to fluid syntax.
- Imagine you have a ViewHelper with the following Render Method signature:
function render(array $bla)
- then it would be very nice if one could write the following:
<f:xy arr.someArrayKey="foo" /> // "foo" is not validated, as we do not have any more type information.
- Additionally, one could override specific key/value pairs of array arguments:
<f:xy arr="{myArray}" arr.someArrayKey="foo" /> // "foo" is merged into {myArray}
Additionally, one could register specific array keys, and validate them. Imagine the following argument registration:$this->registerArgument('foo.bar', 'boolean', REQUIRED=TRUE);
- Now, it is validated that foo.bar is a boolean value, which exists; so you would know that $this->arguments['foo']['bar'] is really a boolean and it is set.
What needs to be changed internally:¶
On compile time:¶
- TemplateParser->abortIfUnregisteredArgumentsExist($expectedViewHelperArguments, $argumentsObjectTree);
- if Argument name is "bla.blubb", check that either the argument "bla.blubb" or the argument "bla" has been explicitely registered (and "bla" is an array)
- TemplateParser->abortIfRequiredArgumentsAreMissing($expectedViewHelperArguments, $argumentsObjectTree);
- do not abort if "bla.blubb" is not registered, but "bla" is.
On run-time: Type checking¶
- change validateArguments in AbstractVH
- MERGING von "arr.abcde" und "arr" (Punkt-Syntax überschreibt)
- VALIDIERUNG (von allen regeln) -> d.h. wenn es eine Regel "arr.abcde" gibt, dann wird geschaut ob es diesen Array Key gibt
Examples of possible usage¶
<f:widget.paginate objects="{posts}" configuration.position="top" configuration.itemsPerPage="3" configuration.linkCurrent="false" /> <==>
<f:widget.paginate objects="{posts}" configuration="{position: 'top', itemsPerPage: 3, linkCurrent: 'false'}" />
Shorthand Sxntax¶
Will work like the explicit syntax:{f:widget.paginate(objects: posts, configuration.position: 'top')}
However, for Arrays, this is NOT ALLOWED: {foo: {bar: '123'}} {foo.bar: '123', foo: {bar: '123'}} < this should be forbidden!
History
#1 Updated by Sebastian Kurfuerst about 4 years ago
- Tracker changed from Major Feature to Story
#2 Updated by Sebastian Kurfuerst about 4 years ago
- Tracker changed from Story to Feature