【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メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!

「プログラミング、右も左もわからない…」という方にオススメ

cta_under_bnr

当プログラミングスクール「侍エンジニア」では、これまで6000人以上のエンジニアを輩出してきました。

その経験を通してプログラミング学習に成功する人は、「目的目標が明確でそれに合わせた学習プランがあること」「常に相談できる人がそばにいること」「自己解決能力が身につくこと」この3つが根付いている傾向を発見しました。

侍エンジニアは上記3つの成功ポイントを満たすようなサービス設計に磨きをかけております。

cta_under_bnr

「自分のスタイルや目的に合わせて学習を進めたいな」とお考えの方は、ぜひチェックしてみてください。

詳細はこちら

書いた人

ヤマシタ

システムエンジニアとして10年勤務→フリーランスへ。現在は侍ブログ編集部として、これまでに200記事以上の記事を執筆。
大規模システム開発からWebアプリ開発まで経験あり。最近ではPythonの機械学習に挑戦中。プログラミング初学者に向けてわかりやすく、ためになるコンテンツ作りを心がけています。

おすすめコンテンツ

まずはここから!初心者でも1から学べるプログラミング入門カリキュラム

転職成功で受講料0円!あなたもプログラミングを学んでエンジニアデビュー