#1005: Allow configuration parameter type casts
-------------------------+--------------------------------------------------
Reporter: david | Owner: impl
Type: enhancement | Status: new
Priority: normal | Milestone: 1.0
Component: config | Version: 1.0.0beta7
Severity: normal | Keywords:
Has_patch: 0 |
-------------------------+--------------------------------------------------
Description changed by david:
Old description:
> Several reasons do do this
> * what if I want a literal "true", not an auto-cast boolean?
> * handling of constants is a mess, some classes do it in userspace code
> * sometimes, it's necessary to ''really'' have an int value, not just a
> numeric string, e.g. when passing something to certain internal classes
> (ext/soap's constructors, for instance)
>
> The types, if declared, should be handled and cast, and if not declared.
> the current automatic behavior through
> {{{AgaviToolkit::literalize()}}} should be retained.
>
> So, I suggest:
> * {{{<ae:parameter name="foo" type="bool" >true</ae:parameter>}}}
> (how does that behave?)
> * {{{<ae:parameter name="foo" type="boolean" >true</ae:parameter>}}}
> (how does that behave?)
> * {{{<ae:parameter name="foo" type="int" >1234</ae:parameter>}}}
> * {{{<ae:parameter name="foo" type="integer" >1234</ae:parameter>}}}
> * {{{<ae:parameter name="foo" type="float" >1234.5</ae:parameter>}}}
> * {{{<ae:parameter name="foo" type="double" >1234.5</ae:parameter>}}}
> * {{{<ae:parameter name="foo" type="real" >1234.5</ae:parameter>}}}
> * {{{<ae:parameter name="foo" type="string" >true</ae:parameter>}}}
> * {{{<ae:parameter name="foo"
> type="constant">SOAP_SINGLE_ELEMENT_ARRAYS</ae:parameter>}}}
> * {{{<ae:parameter name="foo" type="constant">SOAP_SINGLE_ELEMENT_ARRAYS
> | SOAP_USE_XSI_ARRAY_TYPE</ae:parameter>}}} (I guess we don't need
> support for brackets)
>
> The same issue exists for parameter '''names''' (where we don't do any
> casting right now), s we need:
> * {{{<ae:parameter keytype="bool" name="true"
> >foo</ae:parameter>}}} (how does that behave?)
> * {{{<ae:parameter keytype="boolean" name="true"
> >foo</ae:parameter>}}} (how does that behave?)
> * {{{<ae:parameter keytype="int" name="1234"
> >foo</ae:parameter>}}}
> * {{{<ae:parameter keytype="integer" name="1234"
> >1234</ae:parameter>}}}
> * {{{<ae:parameter keytype="float"
> name="1234.5">1234.5</ae:parameter>}}}
> * {{{<ae:parameter keytype="double"
> name="1234.5">1234.5</ae:parameter>}}}
> * {{{<ae:parameter keytype="real"
> name="1234.5">1234.5</ae:parameter>}}}
> * {{{<ae:parameter keytype="constant"
> name="PHP_OS">true</ae:parameter>}}}
>
> Combination examples:
> * {{{
> <database name="yay" class="AgaviPdoDatabase">
> <ae:parameter name="attributes">
> <ae:parameter keytype="constant" name="PDO::ATTR_ERRMODE"
> type="constant">PDO::ERRMODE_EXCEPTION</ae:parameter>
> </ae:parameter>
> </database>
> }}}
New description:
Several reasons do do this
* what if I want a literal "true", not an auto-cast boolean?
* handling of constants is a mess, some classes do it in userspace code
* sometimes, it's necessary to ''really'' have an int value, not just a
numeric string, e.g. when passing something to certain internal classes
(ext/soap's constructors, for instance)
The types, if declared, should be handled and cast, and if not declared.
the current automatic behavior through
{{{AgaviToolkit::literalize()}}} should be retained.
So, I suggest:
* {{{<ae:parameter name="foo" type="bool" >true</ae:parameter>}}} (how
does that behave?)
* {{{<ae:parameter name="foo" type="boolean" >true</ae:parameter>}}} (how
does that behave?)
* {{{<ae:parameter name="foo" type="int" >1234</ae:parameter>}}}
* {{{<ae:parameter name="foo" type="integer" >1234</ae:parameter>}}}
* {{{<ae:parameter name="foo" type="float" >1234.5</ae:parameter>}}}
* {{{<ae:parameter name="foo" type="double" >1234.5</ae:parameter>}}}
* {{{<ae:parameter name="foo" type="real" >1234.5</ae:parameter>}}}
* {{{<ae:parameter name="foo" type="string" >true</ae:parameter>}}}
* {{{<ae:parameter name="foo"
type="constant">SOAP_SINGLE_ELEMENT_ARRAYS</ae:parameter>}}}
* {{{<ae:parameter name="foo" type="constant">SOAP_SINGLE_ELEMENT_ARRAYS
| SOAP_USE_XSI_ARRAY_TYPE</ae:parameter>}}} (I guess we don't need support
for brackets)
The same issue exists for parameter '''names''' (where we don't do any
casting right now), s we need:
* {{{<ae:parameter keytype="bool" name="true" >foo</ae:parameter>}}}
(how does that behave?)
* {{{<ae:parameter keytype="boolean" name="true" >foo</ae:parameter>}}}
(how does that behave?)
* {{{<ae:parameter keytype="int" name="1234" >foo</ae:parameter>}}}
* {{{<ae:parameter keytype="integer" name="1234"
>1234</ae:parameter>}}}
* {{{<ae:parameter keytype="float"
name="1234.5">1234.5</ae:parameter>}}}
* {{{<ae:parameter keytype="double"
name="1234.5">1234.5</ae:parameter>}}}
* {{{<ae:parameter keytype="real"
name="1234.5">1234.5</ae:parameter>}}}
* {{{<ae:parameter keytype="constant"
name="PHP_OS">true</ae:parameter>}}}
Combination examples:
{{{
<database name="yay" class="AgaviPdoDatabase">
<ae:parameter name="attributes">
<ae:parameter keytype="constant" name="PDO::ATTR_ERRMODE"
type="constant">PDO::ERRMODE_EXCEPTION</ae:parameter>
</ae:parameter>
</database>
}}}
--
--
Ticket URL: <http://trac.agavi.org/ticket/1005#comment:1>
Agavi <http://www.agavi.org/>
An MVC Framework for PHP5
_______________________________________________
Agavi Tickets Mailing List
[email protected]
http://lists.agavi.org/mailman/listinfo/tickets