Cakephp3 メモ

コントローラー内に

```php
$this->set('title', 'hello');
$this->set('message','this is message');
```

で書いた記述は

ビューで

```php
  <h1><?php echo $title; ?></h1>
  <p><?php echo $message; ?></p>
```

のように使用出来る




#変数
###$this->set();
```php
//コントローラーで使用
$this->set(変数名, 値);
```

**使用例１）**

```php
 $values = [
            'title' => 'hello',
            'message' => 'this is message',
            'email' => 'hoge@com.jp'
        ];
        $this->set('values', $values);
```
上記のようにすると毎回

```
$this->set('title', 'hello');
$this->set('message','this is message');
```
とやらなくても1回の記述で複数の値をビューへ渡せる

ビュー側では

```php
   <h1><?php echo $values['title']; ?></h1>
    <p><?php echo $values['message']; ?></p>
    <p><?php echo $values['email']; ?></p>
```

上記のように表示の記述を書く。


#デバッグキット
config/app.php（本番環境）
confi/app_local.php(開発環境）

上記の
```debug' => filter_var(env('DEBUG', true), FILTER_VALIDATE_BOOLEAN),```
の部分をture or falseとして表示の有無を変更可能


＃フォーム

index.ctp(入力画面）

```php

    <table>
        <?php echo $this->Form->create(null, [
            'type' => 'post',
            'url' => [
                'controller' => 'Hello', //現在のページのコントローラーを使用する際は指定不要
                'action' => 'confirm'
            ],
            "class" => "contact-form",
            'novalidate' => true,
            "name" => 'form_name'
        ]);
        ?>
        <tr>
            <th>name</th>
            <td>
                <input type="text" name='name'>

            </td>
        </tr>
        <tr>
            <th>email</th>
            <td>
                <input type="text" name='email'>
            </td>
        </tr>
        <tr>
            <th>age</th>
            <td>
                <input type="number" name='age'>
            </td>
        </tr>
        <tr>
            <th></th>
            <td>
                <button>click</button>
            </td>
        </tr>

        <?= $this->Form->end(); ?>
    </table>
```

confirm.ctp（確認画面）

```php

<h1><?php echo $form_data['name']; ?></h1>
<p><?php echo $form_data['email']; ?></p>
<p><?php echo $form_data['age']; ?></p>
```


confirmアクションを記述のコントローラー

```php
public function confirm()
    {
        $this->viewBuilder()->enableAutoLayout(false);
        $form_data = [
            "name" => $this->request->data['name'],
            "email" => $this->request->data['email'],
            "age" => $this->request->data['age'],
        ];

        $this->set('form_data', $form_data);
    }
}
```

上記で簡単なデータ送信フォームが作れる

＃＃ポイント
フォームで送った値は
```$this->request->data[name属性]```
でコントローラーで取得出来る。
これを変数にしてビューに渡すことでデータのやりとりが可能になる

###タグのエスケープ
上記のconfirm.ctpの記述ではHTMLタグがそのままエスケープされる

```php
<h1><?php echo h($form_data['name']); ?></h1>
<p><?php echo h($form_data['email']); ?></p>
<p><?php echo h($form_data['age']); ?></p>
```
のように```h()```で囲うとタグのエスケープが出来る


＃フォームヘルパー
上記のinputタグは以下のように書き換え可能

```php
   <table>
        <?php echo $this->Form->create(null, [
            'type' => 'post',
            'url' => [
                'controller' => 'Hello', //現在のページのコントローラーを使用する際は指定不要
                'action' => 'confirm'
            ],
            "class" => "contact-form",
            'novalidate' => true,
            "name" => 'form_name'
        ]);
        ?>
        <tr>
            <th>name</th>
            <td>
                <!-- <input type="text" name='name'> -->
                <?= $this->Form->input('name', [
                    'type' => 'text', 'placeholder' => '' ,'class' => '', 'maxlength' => '40','label'=>false,
                    ]); ?>
            </td>
        </tr>
        <tr>
            <th>email</th>
            <td>
                <!-- <input type="text" name='email'> -->
                <?= $this->Form->input('email', [
                    'type' => 'text', 'placeholder' => '' ,'class' => '', 'maxlength' => '40','label'=>false,
                    ]); ?>
            </td>
        </tr>
        <tr>
            <th>age</th>
            <td>
                <!-- <input type="number" name='age'> -->
                <?= $this->Form->input('age', [
                    'type' => 'text', 'placeholder' => '' ,'class' => '', 'maxlength' => '40','label'=>false,
                    ]); ?>
            </td>
        </tr>
        <tr>
            <th></th>
            <td>
                <!-- <button>click</button> -->
                <?=$this->Form->submit('送信',[]) ?>
            </td>
        </tr>

        <?= $this->Form->end(); ?>
    </table>
```