#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

Reply via email to