Говоря, что cakePHP будет отображаться как XML / использовать xml / blah.ctp вместо blah.ctp

0

Я успешно использовал файлы представления XML в CakePHP (запросите тип вывода XML в заголовках, поэтому CakePHP будет использовать, например, Orders/xml/create.ctp вместо Order/create.ctp).

Однако теперь мне нужно добавить некоторые функции, которые требуют от меня переформатировать XML в конце большинства бизнес-логик контроллера.

Поэтому я попробовал это в действии контроллера:

public function createorder() {
    $this->autoRender = false; // disable automatic content output
    $view = new View($this, false); // setup a new view

    { ... all kinds of controller logic ...}

    { ... usually i would be done here and the XML would be outputted, but the autorender will stop that from happening ... }

    { ... now i want the XML in a string so i can manipulate the xml ... }
   $view_output = $view->render('createorder'); // something like this

}

Но то, что это дает мне, это:

<?xml version="1.0" encoding="UTF-8"?>
 <response>
  <error>View file &amp;quot;/Users/test/Documents/hosts/mycakeapp/app/View/Orders/createorder.ctp&amp;quot; is missing.</error>
  <name>MissingViewException</name>
  <code>500</code>
  <url>/orders/createorder/</url>
 </response>

Поэтому мне нужно сказать CakePHP, чтобы получить xml/createorder.ctp вместо createorder.ctp. Как мне это сделать?

Ура!

Теги:
cakephp

2 ответа

0
Лучший ответ

Эти ответы относятся к cakephp 2.4

I have been successfully using XML view files in CakePHP (request the XML output 
type in headers so CakePHP will use e.g. Orders/xml/create.ctp 
instead of Order/create.ctp).

В lib/Cake/View вы можете видеть разные файлы вида:

View.php
XmlView.php //This extends View.php
JsonView.php //This extends View.php

Итак, вы сказали cakephp использовать XmlView. Когда вы создаете новый вид, вам нужно использовать XmlView вместо View. Или вы можете создать свой собственный View и поместить его в папку app/View. В пользовательском представлении вы можете установить свой субдиректор.

<?php
App::uses('View', 'View');

class CustomView extends View {

    public $subDir = 'xml';

    public function __construct(Controller $controller = null) {
        parent::__construct($controller);
    }

    public function render($view = null, $layout = null) {
        return parent::render($view, $layout);
    }  
}

Итак, теперь вам нужно создать свой пользовательский вид $view = new CustomView($this, false);

Вы также можете писать в своих функциях CustomView для обработки данных в виде xml и использовать их для каждого действия.

Также @Jelle Keizer ответ должен работать. $this->render('/xml/createorder'); указывает на app/View/xml/createorder. Если вам нужно это указать на app/View/Order/xml/create просто используйте $this->render('/Orders/xml/create'); ,

  • 0
    Спасибо, это работает. Мне нужно добавить / Заказы. Чего-то, чего я не ожидал, так как ожидал, что торт откроется с пути просмотра контроллеров (Order /) Также благодаря @JelleKeizer, который был очень близок ..
0
$this->render('/xml/createorder');
  • 0
    Нет, это возвращает: «Просмотреть файл /Users/test/Documents/hosts/mycakeapp/app/View/xml/createorder.ctp отсутствует».
  • 0
    хорошо убедитесь, что файл шаблона находится в этом месте
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню