LoginSignup
21
24

More than 5 years have passed since last update.

Cake3でお問い合わせフォームを作成する方法(DBを使わない)

Last updated at Posted at 2015-06-19

Cake3でお問い合わせフォームを作成する方法(DBを使わない)

想定

  • お問い合わせフォームのようなものを作りたい
  • DBは利用せず内容をメール送信する

作り方

  • 対応するテーブルがないので Cake3からある TableEntity は使わない
  • Cake\Form\Form というクラスを利用する

コード

src/Form/ContactForm.php

<?php

namespace App\Form;

use Cake\Form\Form;
use Cake\Form\Schema;
use Cake\Validation\Validator;
use Cake\Network\Email\Email;

class ContactForm extends Form
{

    // お問い合わせフォームのスキーマを定義する
    protected function _buildSchema(Schema $schema)
    {
        return $schema->addField('name', 'string')
            ->addField('email', ['type' => 'string'])
            ->addField('body', ['type' => 'text']);
    }

    // バリデーション内容を定義する
    protected function _buildValidator(Validator $validator)
    {
        return $validator->add('name', 'length', [
                'rule' => ['minLength', 10],
                'message' => '名前は10文字以上入力してください。'
            ])->add('email', 'format', [
                'rule' => 'email',
                'message' => 'メールアドレスを入力してください。',
            ]);
    }

    // バリデーション後に実行したい処理を記述する
    protected function _execute(array $data)
    {
        // メールを送信する
        $email = new Email('default');
        $email->from(['test@example.com' => 'from名'])
            ->to('hoge@example.com')
            ->subject('タイトル')
            ->send('本文です。');
        return true;
    }
}

src/Controller/ContactsController.php

<?php

namespace App\Controller;

use App\Form\ContactForm;

class ContactsController extends AppController
{
    public function index()
    {
        $contact = new ContactForm();

        if ($this->request->is('post')) {
            if ($contact->execute($this->request->data)) {
                $this->Flash->success('メール送信しました');
            } else {
                $this->Flash->error('バリデーションに引っかかりました。');
            }
        }

        $this->set('contact', $contact);
    }
}

src/Template/Contacts/index.php

<?php
echo $this->Form->create($contact);
echo $this->Form->input('name');
echo $this->Form->input('email');
echo $this->Form->input('body');
echo $this->Form->button('Submit');
echo $this->Form->end();
?>

21
24
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
24