【CakePHP入門】setメソッドでViewにデータを送る方法

CakePHPにはController、Model、Viewの層があり、それぞれ役割があります。

ControllerはCakePHPの中でも最も基本的な処理を扱い、ViewはControllerなどから受け取った情報を処理してブラウザに表示します。

CakePHPではControllerからViewへデータを渡すには、setメソッドを使用します。

この記事では、

・setメソッドとは?
・setメソッドの基本的な使い方
・配列を管理するsetクラスとは?

という基本的な内容から、

・setメソッドで連想配列を指定する方法
・setメソッドでcompact関数を使用する方法

などの応用的な使い方について解説します。

ここではsetメソッドを使用して、さまざまな形式でViewにデータを渡す方法について、詳しく解説していきます!

目次

setとは

setメソッドとはViewにデータを渡すためのControllerの機能です

setメソッドを使用して渡された変数は、view内で使用することができます。

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

$this->set('変数名', $値);

第一引数は、Viewで使用するための変数名を使用し、第二引数には変数名に対応する値を指定します。

CakePHPではControllerからViewにデータを渡すときに使用するsetメソッドは、よく使用する最も基本的な処理となります。

setの基本的な使い方

ここでは、実際にsetメソッドを使用してViewに変数を渡す方法を見ていきましょう。

以下にsetメソッドを使用した簡単なサンプルを紹介します。

cake/src/Controller/SetController.php

<?php

namespace App\Controller;

use App\Controller\AppController;

class SetController extends AppController
{
  public function index() {

    $item = 'apple';
    $this->set('fruits', $item);

  }
}

?>

cake/src/Template/Set/index.ctp

You are about to eat an 

実行結果

You are about to eat an apple

このようにControllerで作成した変数を「$this->set(‘fruits’, $item);」の形式で渡せば、Viewで変数$fruitsの値が参照できることがわかりましたね。

配列を管理するsetクラス

setは、紹介したViewにデータを渡す機能以外に、配列を管理するsetクラスがあります。

setクラスを使用すればさまざまな配列操作が可能ですが、CakePHPのバージョン2.2で廃止され、Hashクラスに置き換わりました。

Hashクラスを使用して、さまざまな配列処理を行う方法については、以下の記事で詳しく解説しています!

連想配列を指定する方法

setメソッドは連想配列を指定することもできます。

配列などのデータの塊をViewに渡す処理は実際によく使用されます。

以下に連想配列をViewに渡して、データを表示する簡単なサンプルを紹介します。

cake/src/Controller/SetController.php

<?php

namespace App\Controller;

use App\Controller\AppController;

class SetController extends AppController
{
  public function index() {

    //連想配列を作成
    $fruits = [
      'apple'=>'100円',
      'orange'=>'80円',
      'melon'=>'700円',
      'banana'=>'100円',
      'pineapple'=>'350円'
    ];

    $this->set('fruits', $fruits);

  }
}

?>

cake/src/Template/Set/index.ctp

<table>
    <tr>
        <th>ITEM</th>
        <th>VALUE</th>
    </tr>
    <?php foreach ($fruits as $key => $value): ?>
    <tr>
        <td><?= $key ?></td>
        <td><?= $value ?></td>
    </tr>
    <?php endforeach; ?>
</table>

実行結果
image1

このように配列などのデータの塊もsetメソッドを使用すれば、簡単にViewに渡すことができますね!

compactメソッドを使用する

setメソッドでの便利な記述方法として、compact関数を使用する方法があります。

compact関数とは、変数名とその値から配列を作成する関数です。

compact( $変数名1 [, $変数名2 $... ] )

先程紹介したように、setメソッドは配列にも対応しているため、compact関数を使用することができます。

例えば、従来の方法では以下のように変数名を1つずつsetメソッドに指定する必要があります。

$item1 = 'apple';
$item2 = 'orange';
$item3 = 'melon';

$this->set('item1', $item1);
$this->set('item2', $item2);
$this->set('item3', $item3);

しかしcompactメソッドを使用すれば、以下のように簡潔に記述することができます。

$item1 = 'apple';
$item2 = 'orange';
$item3 = 'melon';

$this->set(compact('item1', 'item2', 'item3'));

まとめ

ここではsetメソッドを使用して、Viewにデータを渡す基本的な方法から連想配列を渡す方法、compactメソッドを使用して渡す方法などを解説しました。

setメソッドはControllerからViewにデータを渡す処理で、CakePHPでも最も基本的な処理と言えます。

そのため、setメソッドの使い方についてはよく理解しておきましょう。

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

この記事を書いた人

侍エンジニア塾は「人生を変えるプログラミング学習」をコンセンプトに、過去多くのフリーランスエンジニアを輩出したプログラミングスクールです。侍テック編集部では技術系コンテンツを中心に有用な情報を発信していきます。

目次