Как визуализировать представление/шаблон внутри CakePHP Shell?

Я запускаю несколько cronjobs в качестве оболочек CakePHP, и мне нужно создать там определенные документы. Некоторые из них представляют собой HTML-файлы, которые будут преобразованы в PDF-файлы, некоторые из них представляют собой электронные письма с содержимым HTML. У меня есть шаблоны/представления для них, и я могу отображать их через контроллер. Как я могу отобразить их в Shell?

В настоящее время я использую str_replace() для замены определенных токенов строками, которые мне нужны, но это грязно, и мне нужно больше функций, подобных шаблонам, таких как циклы и условия.

В Smarty есть Smarty->fetch(). В CodeIgniter есть $this->load->view(). Как это делается в CakePHP?


person Ivan Petrushev    schedule 12.07.2012    source источник


Ответы (2)


В торте 1.3:

    App::import('Controller');
    $this->view = new View(new Controller(), false);
    $this->view->viewPath = 'elements';
    echo $this->view->element($name,$params);

В торте 3.x

    $view = new View();
    echo $view->element($name,$params);
person Amorphous    schedule 26.01.2016

Я не считаю str_replace грязным.

виды торта могут быть легко преобразованы в строковую переменную… с помощью «requestAction()»

function {
requestAction("/controller/action/input1/input2",array("return"));
}

Источник: Сообщение №3 и последующие: http://cakebaker.wordpress.com/2005/12/31/cakephp-and-smartyies/

$posts = $this->requestAction(‘posts/index’);
foreach($posts as $post):
echo $post['Post']['title'];
endforeach;
person TheBlackBenzKid    schedule 12.07.2012
comment
str_replace становится грязным, когда вам нужно заменить некоторые более сложные структуры, чем простые строки. Этот requestAction() требует использования дополнительного контроллера, и его действие отображает представление. Также я не уверен, как это работает, кажется, он делает настоящий http-запрос. У меня это работает, только если я ставлю полный http://www.domain.com/controller/action/ в качестве первого параметра. Я подумал, что может быть более простой подход, например, поместить эти данные в это представление и дать мне результат. - person Ivan Petrushev; 13.07.2012
comment
Возможно, вы могли бы <?=getFunction($abc)?> поместить это в файлы шаблонов. Тогда вы могли бы в контроллерах PHP использовать function getFunction($result) и называть это так? - person TheBlackBenzKid; 13.07.2012