I can confirm this issue. The Xml class does not play nice with the array
structure generated by the model find method when multiple records are
returned. Due to the time sensitive nature of my task, I opted to use JSON
rather than debug a core utility class. That said, I would certainly love
to hear the fix if anyone has it readily available.
Ryan
On Thursday, 23 August 2012 04:47:02 UTC-6, Alexandre LeprĂȘtre wrote:
>
> Hi everyone,
>
> I am trying to build a nice REST API for my website and I had never tried
> it through CakePHP. I started to follow the (short) instructions, however,
> the way it works looks totally different from what I can read in the
> Cookbook.
>
> I use CakePHP 2.2.1.
>
> Here's what I've done so far:
>
> *app/Controller/OrdersController.php*
> <?php
> class OrdersController extends AppController {
> public function fetch($accountId) {
> $this->loadModel('Account');
> $this->Account->id = $accountId;
> $orders = $this->Order->find('all', array(
> 'conditions' => array('Order.account_id' => $accountId)
> ));
> $response = $orders;
> $this->set(compact('response'));
> }
> }
>
> *app/View/Orders/xml/fetch.ctp*
> <?php
> $xml = Xml::fromArray(array('orders' => $orders));
> echo $xml->asXML();
>
> I tried this with the first account and everything was fine
>
> *Ouput:*
> <orders>
> <Order>
> <id>502cc39f-5b74-4a25-9bb2-670458d0d2b2</id>
> <order_ref>96277</order_ref>
> <account_id>502cc39d-8640-465a-b0da-670458d0d2b2</account_id>
> <created>2012-08-16 09:55:43</created>
> <modified>2012-08-16 09:55:43</modified>
> </Order>
> </orders>
>
> Everything is fine with an account that has one order.
>
> However, with an account that has several orders, this doesn't work
> anymore.
>
> *Expected output:*
> <orders>
> <Order>
> <id>502cc39f-66eb-59d2-2337-670458d0d2b2</id>
> <order_ref>96255</order_ref>
> <account_id>502cc39d-6325-ad25-5b64-670458d0d2b2</account_id>
> <created>2012-08-16 09:42:33</created>
> <modified>2012-08-16 09:42:33</modified>
> </Order>
> <Order>
> <id>502cc39f-ee21-3c89-8120-670458d0d2b2</id>
> <order_ref>96231</order_ref>
> <account_id>502cc39d-6325-ad25-5b64-670458d0d2b2</account_id>
> <created>2012-08-16 09:21:01</created>
> <modified>2012-08-16 09:21:01</modified>
> </Order>
> </orders>
> *
> *
> *What I get:*
> This page contains the following errors:
> error on line 1 at column 367: Entity 'nbsp' not defined
> Below is a rendering of the page up to the first error.*Warning*
> (2)<http://devapi.ssl247.net/orders/fetch/502cc1be-7e48-4913-89c2-65f058d0d2b2.xml>:
>
> SimpleXMLElement::__construct()
> [simplexmlelement.--construct<http://devapi.ssl247.net/orders/fetch/simplexmlelement.--construct>]:
>
> Entity: line 3: parser error : Extra content at the end of the document [*
> CORE\Cake\Utility\Xml.php*, line
> *197*]Code<http://devapi.ssl247.net/orders/fetch/502cc1be-7e48-4913-89c2-65f058d0d2b2.xml>
>
> Context<http://devapi.ssl247.net/orders/fetch/502cc1be-7e48-4913-89c2-65f058d0d2b2.xml>
>
> I assume that Xml::fromArray() doesn't accept multiple numeric keys. Or
> something like this. I don't mind editing my PHP array to get he XML I
> expect but I really don't know how I should write my array for this :-(
>
> Any help is welcome.
>
> Thank you!!
>
> Alex
>
--
You received this message because you are subscribed to the Google Groups
"CakePHP" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
Visit this group at http://groups.google.com/group/cake-php?hl=en-US.