うさぎのイラスト

ネットアンサー55備忘録

ワードプレス技術を色々とお試しするサイトです。

CakePHP3のForm Helperの使い方

-2017年06月03日- cakephpcake
参考にしたサイト
【select使用の場合】 find.ctp
<div>
    <h3>Find photo</h3>
    <?= $msg ?>
    <?= $this->Form->create() ?>
    <fieldset>
        <?= $this->Form->input('name'); ?>
    <?php
    echo $this -> Form -> input  ( "area",
                                 [ "type" => "select",
                                   "options" => [ "リピング" => "リピング",
                                                  "パスルーム" => "パスルーム",
                                                  "ベットルーム" => "ベットルーム" ], 
                                   "value" => "リピング",
                                   "empty" => "条件なし検索" ] );
                                      ?>

    <?php
    echo $this -> Form -> input  ( "style",
                                 [ "type" => "select",
                                   "options" => [ "ワイドスパン" => "ワイドスパン",
                                                  "アクセントウォール" => "アクセントウォール",
                                                  "フラット" => "フラット" ], 
                                   "value" => "フラット",
                                   "empty" => "条件なし検索" ] );
                                      ?>



        <?= $this->Form->button('Submit') ?>
        <?= $this->Form->end() ?>
    </fieldset>
    <table>
    <thead>
        <tr>
            <th>ID</th>
            <th>NAME</th>
            <th>AREA</th>
            <th>STYLE</th>
        </tr>
    </thead>
    <tbody>
    <?php foreach ($photos as $photo): ?>
        <tr>
            <td><?= h($photo->id) ?></td>
            <td><?= h($photo->name) ?></td>
            <td><?= h($photo->area) ?></td>
            <td><?= h($photo->style) ?></td>
        </tr>
            <?php endforeach; ?>
            </tbody>
    </table>
</div>

PhotosController.php(一部のみ)
	public function find() {
		$photos = [];
	
		// 今回はこちらで大丈夫ですが、検索ボタンを押したときのHTTPリクエストはGETで処理する方がよいです。
		if ($this->request->is('post')) {
	
			// $findとしてリクエストからデータを取得しておりましたが、変数名はわかりやすいものがよいでしょう。
			// 単純にリクエストデータとして、そのまま取得した方が後で見返したときに把握しやすいと思います。
			$requestData = $this->request->data();
			// 検索及び一覧データの作成にはいくつか方法がありますが、こちらでお試しください。
			// 検索条件を事前に作ってしまいます!
			$conditions = [];
			if (!empty($requestData['name'])) {
				$conditions['name like'] = '%'.$requestData['name'].'%';
			}
			if (!empty($requestData['area'])) {
				$conditions['area like'] = '%'.$requestData['area'].'%';
			}
			if (!empty($requestData['style'])) {
				$conditions['style like'] = '%'.$requestData['style'].'%';
			}
			// こうすると、検索条件に合わせて自在にwhere句を生成できます^^
			$photos = $this->Photos->find()
			   ->where($conditions);
		}
		// この$msgは、config/の直下にconst.phpなどを作って定数として定義し、.ctpファイルの中でしようするとよいでしょう。今回はこのままで大丈夫です!
		$this->set('msg', "名前orエリアorスタイルで検索出来ます(あいまい検索も可能)");
		$this->set('photos', $photos);
	}

コメントをどうぞ

メールアドレス (必須・公開されません)
コメント本文
  • スパム・迷惑コメント投稿防止のため、メールアドレスの入力が必須ですが、公開はされません。何卒ご協力のほどお願いいたします。
  • 投稿いただいたコメントは管理者のチェック後掲載しておりますので、即時には反映されません。