【CakePHP入門】render()メソッドで任意のViewファイルを指定する

こんにちは!フリーエンジニアのヤマシタです。

Viewで描画を行うときに、処理によっては別のViewファイルを指定したい場合もあります。

この記事では、

・renderメソッドとは
・renderメソッドで引数を指定しない場合
・renderメソッドで引数を指定した場合
・renderメソッドの注意点

などのrenderメソッドの使い方に関して解説していきます。

renderメソッドは、別のViewファイルを描画したいときに非常に便利です。

ここではそんなrenderメソッドの使い方について、分かりやすく解説します!

renderメソッドとは

Controller::render()メソッドは、各アクションの最後に自動的に呼ばれ、Viewを描画します。

CakePHPでは、$this->autoRenderにfalseを指定しない限り、Controllerのアクションの最後に自動的にViewが呼び出されます。

ここで、

「Controllerの最後で自動的にViewが呼び出されるならrenderメソッドは不要では?」

と疑問に思われる方もいるかもしれません。

しかし、処理によっては別のViewのファイル(ctp)を指定したいときもあります。

そのような場合はrenderメソッドを使用すると便利です。

renderメソッドは以下のように記述します。

$this->render(string $view, string $layout);

引数にViewで描画するctpファイルを指定することで、そのファイルが呼び出されます。

renderメソッドの使い方

ここでは実際にrenderメソッドを使用してViewを呼出してみましょう。

引数を指定しない場合

以下はrenderメソッドで引数を指定しない場合のサンプルです。

引数を指定しない場合は、通常の規約どおりにViewファイルが呼び出されます。

src/Controller/SampleController.php

<?php

namespace App\Controller;

use App\Controller\AppController;

class SampleController extends AppController
{

  public function index() {

    $this->render();

  }
}

src/Template/Sample/index.ctp

<h2>これはindex.ctpです。</h2>

このサンプルを実行すると、「src/Template/Sample/index.ctp」のViewファイルが描画されます。

実行結果:
render_image1

しかし、引数を指定しない場合はrenderメソッドを使用しなくても、Viewファイルが自動的に呼び出されます。

そのためrenderメソッドで引数を指定しないで使用することは、用途的には少ないと言えるでしょう。

引数を指定した場合

次にrenderメソッドに引数を指定したサンプルを紹介します。

以下のようにrenderメソッドに引数で別のctpファイルを指定します。

src/Controller/SampleController.php

<?php

namespace App\Controller;

use App\Controller\AppController;

class SampleController extends AppController
{

  public function index() {

    $this->render('/Sample2/sample');

  }
}

引数に指定した「/Sample2/sample」は、src/Templateフォルダからの相対パスであるとみなします。

そのためViewファイルは「src/Template/Sample2/sample.ctp」に作成します。

sample.ctp

<h2>これはsample.ctpです。</h2>

このサンプルを実行すると、Viewファイルはrenderメソッドで指定した「'/Sample2/sample'」が実行されます。

実行結果:
image2

renderメソッドの注意点

注意しておきたいのが、renderメソッドはsetメソッドで渡したデータを使ってViewを描画します。

そのため、先にrenderメソッドを指定すると以降の処理は実行されません。

<誤>

    $this->render('/Sample2/sample');
    $this->set('sample', 'テスト文字列');

↑の処理ではrenderメソッドで処理が止まってしまい、setメソッドが実行されません。

Viewファイルで変数を参照しようとしても、変数が渡されていないため、未定義でエラーとなってしまうので注意しましょう。

正しくは以下のように記述します。

<正>

    $this->set('sample', 'テスト文字列');
    $this->render('/Sample2/sample');

実際にサンプルを動かして動作の違いを確認してみましょう。


src/Controller/SampleController.php

<?php

namespace App\Controller;

use App\Controller\AppController;

class SampleController extends AppController
{

  public function index() {
    //正しいパターンです
    $this->set('sample', 'テスト文字列');
    $this->render('/Sample2/sample');

  }
}

sample.ctp

<h2>これはsample.ctpです。</h2>
<br/>
<?= isset($sample) ?  $sample :'' ?>

実行結果:

正しいパターンでの実行結果

確かに、sampleに値が受け渡されましたね!

まとめ

ここでは、Viewを描画するrenderメソッドについて、

・renderメソッドとは
・renderメソッドで引数を指定しない場合
・renderメソッドで引数を指定した場合
・renderメソッドの注意点

などについて解説しました。

renderメソッドは別のViewファイルを指定して描画を行いたいときに便利ですので、使い方はよく覚えておきましょう。

もし、render()メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部としてこれまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説