ブラウザに表示させるソースをCakePHPでどこかのディレクトリにHTMLファイルとして出力する方法のひとつを記録です。

なぜこのようなことになったのかというのが、ヘッダーとフッターは固定化されたソースで、主なコンテンツのHTMLソースを入力して記録し、それらを組み合わせてHTMLファイルを生成し吐き出し、そのファイルを納品するという仕組みを作ることになりました。

また、ヘッダーやフッターも色々な種類を用意できるように、それらもカスタムできるようにする。

つまり、各部署をDBに保存し、必要なものの組み合わせてHTMLファイルをつくるということ。WPがブラウザに表示させるために出来上がるHTMLソースをそのままHTMLファイルに変換するようなことと思えばいいかな?

そこで、CakePHPのアクション内にHTMLファイルを吐き出す仕組みを作りたいとなり、何が必要なのかを色々と調べました。

大雑把には以下のような感じで可能でした。

 

// Controllerの上部に追記
use Cake\View\View;
use Cake\Filesystem\File;

// 出力のアクション作成
public function output () {
  $view = new View(); 
  $view->set($this->viewBuilder()->getVars());

  // 使用するレイアウト
  $view->setLayout('output_layout');

  // ビューファイルの指定 以下の二つでディレクトリとファイルの指定になる
  // 例 Template/Outputs/output.php を選ぶ場合
  $view->setTemplatePath('Outputs');
  $view->setTemplate('output');
  $html = $view->render(); // $out に HTMLソースの文字列が代入される

  // ファイルの出力場所とファイル名を指定
  $pathFile = WWW_ROOT.'test.html';

  $file = new File($pathFile, true); // ファイル生成
  $file->write($html); // ファイル内に書き込む
  $file->close();
}

 

今回はCakePHPのwebroot内に作るようにしましたが、出力する都度ファイル名を変更しないと上書きばかりになるので、制作した日付や時間を文字列に変換してファイル名に付けるような感じにすると良いかも。