サブノート

技術的なトピックが中心の備忘録

[PHP][CakePHP]レンダリング後(CTPファイルに変数埋め込み後)の内容をファイルとして保存する

CakePHPにおいて、views/layouts/top.ctp にレンダリングして画面表示する場合は

<?php
/** 画面表示 **/
function index() {
  $this->autoLayout = true;
  $this->layout = 'top';
}
?>

とする。

一方、レンダリング後の内容をファイルに保存する(または、処理を加える)場合は

<?php
/** ファイルとして保存する **/
function save() {

  $this->autoLayout = false;

  // views/layouts/base.ctp に $values をレンダリングした内容を取得する
  $values = array('title' => $_POST['title'], 'name' => $_POST['name']);
  $this->set($values);
  $htmlContents = $this->render('/layouts/base');

  //出力内容をクリアして画面に何も返さない
  $this->output = '';

  // webroot/dst.html として保存する
  $fp = fopen('dst.html', "w");
  fwrite($fp, $htmlContents);
  fclose($fp);

}
?>

とする。