Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
    Martin Goyot
    @Erwyn
    mhhh no, we are not using composer
    Ok, I'll try it
    \o/
    thank you @Arul- you're my hero those days
    Arul
    @Arul-
    :) you are welcome
    Martin Goyot
    @Erwyn
    So after a few tests, it fixes part of the problem
    let me explain

    Say I have a route defined this way:

    /**
         * test post
         *
         * @url POST {id}
         * @param int $id   Id of the artifact {@from body}
         * @param array  $values    Artifact fields values {@from body}
         *
         * @return int
         */
        protected function post($id, array $values) {
            var_dump($values);
            return 4;
        }

    if I input this:

    <response><item><some-property>123</some-property></item></response>

    I will have:

    array (
        '0' => array (
            'some-property' => 123
        )
    )

    which is correct by the way, and what the fixes targets

    Arul
    @Arul-
    ok
    Martin Goyot
    @Erwyn

    but, know, if I input this:

    <response><values><some-property>123</some-property></values></response>

    I will have:

    array(
        'some-property' => 123
    )
    mainly because <values> matches @param array $values as a name
    Arul
    @Arul-
    does it work when you change values to item ?
    Martin Goyot
    @Erwyn
    in the @param?
    Arul
    @Arul-
    in the xml
    let me explain the solution for your problem
    Martin Goyot
    @Erwyn
    if i put <item> instead of <values> yes I have:
    array (
        '0' => array (
            'some-property' => 123
        )
    )
    Arul
    @Arul-
    XmlFormat needs to know which tag it has to consider as numeric index, by default it is item you can change it by adding
    Martin Goyot
    @Erwyn
    but if I put @param array $item then it is the contrary, values works and not item
    oh no you're right, it works
    in RC6
    the problem appeared in RC4
    I'm listening to you though :p
    Arul
    @Arul-
    use Luracast\Restler\Format\XmlFormat;
    
    XmlFormat::$defaultTagName = 'values';
    you can place it in your index.php
    or if each of your api needs different default tag, you can also do the following
    //make sure you add a use statement on top
    use Luracast\Restler\Format\XmlFormat;
    
    //in your api class add the method with a @class comment
    /**
     * test post
     *
     * @url POST {id}
     * @param int $id   Id of the artifact {@from body}
     * @param array  $values    Artifact fields values {@from body}
     *
     * @return int
     *
     * @class XmlFormat {@defaultTagName values}
     */
    protected function post($id, array $values) {
        var_dump($values);
        return 4;
    }
    Martin Goyot
    @Erwyn
    mhhh
    and If I need multiple defaultTagNames? to match the JSON API? is this something possible
    Arul
    @Arul-
    nope not at the moment
    Martin Goyot
    @Erwyn
    okay
    Arul
    @Arul-
    if you present a good and common use case in the same issue (#410) I can consider adding that ;)
    Martin Goyot
    @Erwyn
    haha, would be great :)
    Martin Goyot
    @Erwyn
    no, I have to run some further testing to see if it is really necessary
    Arul
    @Arul-
    sure, go ahead and keep me posted!
    Martin Goyot
    @Erwyn
    just to be sure, it seems that there is another big difference between RC4 and RC6. All @param that are not tagged as {@required false} seems to be considered as required. Am I doing something wrong? Is this configurable somehow?
    Arul
    @Arul-
    if a function parameter has a default value, and is placed after all the required parameters, it is considered as optional
    Martin Goyot
    @Erwyn
    okay, I take good note, and my last question of the day (sorry for bothering you so much today)
    Arul
    @Arul-
    for some reason if you want to override that, you can set {@required} to mark it as required or {@required false} to mark it as optional. When you force a required parameter as optional that method will receive null for that parameter when omitted by the api user
    Martin Goyot
    @Erwyn
    i Have something like this for a route:
    * @param array  $values    Artifact fields values {@from body} {@type \Tuleap\Tracker\REST\v1\ArtifactPOSTValues}
    Arul
    @Arul-
    ok
    Martin Goyot
    @Erwyn
    and the ArtifactPostValues being something like:
    class ArtifactPOSTValues {
    
        /**
         * @var int {@type int} {@required true}
         */
        public $field_id;
    
        /**
         * @var mixed {@require false}
         */
        public $value;
    }
    Arul
    @Arul-
    ok
    Martin Goyot
    @Erwyn
    on RC4 I would have correctly filled objects, but with the RC6, field_id and value are both null (at least using XML, I'll try with JSON)
    ah, and set {@type mixed} ?
    Arul
    @Arul-
    your definition means that you are expecting an array of ArtifactPOSTValues object
    Martin Goyot
    @Erwyn
    yes
    Arul
    @Arul-
    I haven’t tested it with xml lately but it should work
    Check with JSON and file a bug if not consistent
    it is past mid-night in Singapore (1:20am) Will catch you tomorrow
    Martin Goyot
    @Erwyn
    oh sorry, I'm in France