cakephpでお問い合わせフォームをつくる

ビューの作成

1−1 入力ページの作成

「app/View/Contact/index.ctp」というファイルを作成

<?php $this->assign('title','お問い合わせ'); ?>
<?php $this->Html->css('post',null,array('inline' => false)); ?>
 
<?php echo $this->Form->create(false,array('type' => 'post','action' => '')); ?>
 
<div class="container">       
<div class="well1">
<div class="col-12">
 
<div class="panel panel-danger">
<div class="panel-heading">お問い合わせ</div>
<div class="panel-body">
     
<div class="control-group">
<p>お気軽にお問い合わせください</p>
<br />
<hr>
</div>
 
<div class="control-group">
<label class="control-label">※名前</label>
<div class="controls">
<?php echo $this->Form->input('name',array('type' => 'text','label' => false)); ?><?php echo $this->Form->error('ContactModel.name'); ?>
</div>
</div>
 
 <div class="control-group">
<label class="control-label">※Email</label>
<div class="controls">
<?php echo $this->Form->input('email',array('type' => 'text','label' => false)); ?><?php echo $this->Form->error('ContactModel.email'); ?>
</div>
</div> 
 
<div class="col-12 col-lg-12  col-sm-12">  
 
<div class="control-group">
<div class="controls">
<hr />
<label class="control-label">※ご用件</label>
<?php echo $this->Form->input('area',array('type' => 'select','multiple' => 'checkbox','options' => $area,'label' => false)); ?>
<?php echo $this->Form->error('ContactModel.area'); ?>
</label>
<hr />
</div>
</div>
 
</div>               
<div class="control-group">
<div class="controls">
<hr />
<label class="control-label">※問い合わせ</label>
<hr />
<?php echo $this->Form->textarea('text',array('rows' => '10','cols' => '30')); ?> <?php echo $this->Form->error('ContactModel.text'); ?>
</label>
</div>
</div>
 
<div class="control-group">
<div class="controls">
 
<?php echo $this->Form->submit('確認',array('name' => 'enter','class' =>' btn btn-danger')); ?>
 
</div>
</div>
 
</div>
</div>
 
<?php echo $this->Form->end(); ?>
 
</div>
</div>
</div>

1−2 確認ページの作成

「app/View/Contact/result.ctp」というファイルを作成

<?php $this->assign('title','問い合わせ'); ?>
<?php echo $this->Form->create(false,array('type' => 'post','action' => '')); ?>
 
<div class="container">       
<div class="col-12">
 
<div class="panel panel-danger">
<div class="panel-heading">お問い合わせ</div>
<div class="panel-body">
 
<div class="control-group">
<label class="control-label">名前</label>
<div class="controls">
<?php echo $this->data['name']; ?>
</div>
</div>
 
<div class="control-group">
<hr />
<label class="control-label">Email</label>
<div class="controls">
<?php echo $this->data['email']; ?>
</div>
</div>
 
<div class="control-group">
<hr />
<label class="control-label">ご用件</label>
<div class="controls">
<?php
foreach($this->data['area'] as $k => $v){
$area_tmp[$k] = $area[$v];
}
?>
<?php echo implode(',',$area_tmp); ?>
</div>
</div>
 
<div class="control-group">
<hr />
<label class="control-label">内容</label>
<div class="controls">
<?php echo nl2br($this->data['text']); ?>
</div>
</div>
 
<div class="control-group">
<div class="controls">
<hr />
<?php echo $this->Form->submit('送信する',array('name' => 'send','class' =>' btn btn-danger')); ?>
</div>
</div>
 
<div class="control-group">
<div class="controls">
<hr />
<?php echo $this->Form->submit('戻る',array('name' => 'back','class' =>' btn')); ?>
</div>
</div>
 
</div>
</div>
<?php echo $this->Form->end(); ?>
</div>
 
</div>

1−3 .完了ページの作成

「app/View/Contact/finish.ctp」というファイルを作成

<?php $this->assign('title',' お問い合わせ完了画面'); ?>
<?php echo $this->Form->create(false,array('type' => 'post','action' => '')); ?>
 
<div class="container">       
<div class="col-12">
 
<div class="panel panel-danger">
<div class="panel-heading">  送信完了しました。</div>
<div class="panel-body">
 
<?php echo $this->Form->submit('戻る',array('name' => 'back','class' =>' btn btn-danger')); ?>
 
</div>
</div>
<?php echo $this->Form->end(); ?>
</div>

コントローラーの作成

「app/Controller/ContactController.php」というファイルを作成

<?php
class ContactController extends AppController{
    //PostsModelというモデルを使用(入力チェック用)
    public $uses = 'ContactModel';
    //Emailというコンポーネントを使用(メール送信用)
    public $components = array('Email');
    function index(){
        //モデルから以下の配列を取得し、ビューに出力
         //   $this->set('sex',$this->PostsModel->sex);
         $this->set('area',$this->ContactModel->area);
        //「確認する」が押されたとき
        if(isset($this->params['data']['enter'])){
            //モデルに情報をセット
            $this->ContactModel->set($this->data);
            //入力チェック
            if($this->ContactModel->validates()){
                //セッションに情報を保存
                $this->Session->write('data',$this->data);
                //ビューを変更
                $this->render('result');
            }
        //「送信する」が押されたとき
        }elseif(isset($this->params['data']['send'])){
            //セッションの情報を取得
            $data = $this->Session->read('data');
            $this->set('data',$data);
            //メール送信
            $this->sendmail($data);
            //セッションの情報を削除
            $this->Session->delete('data');
            $this->render('finish');
        //「戻る」が押されたとき
        }elseif(isset($this->params['data']['back'])){
            $this->data = $this->Session->read('data');
            $this->render();
        }
    }
    //メール送信関数
    function sendmail($data){
        $this->Email->sendAs = 'text';
        $this->Email->to = $data['email'];
        $this->Email->bcc = array('test@example.com');
        $this->Email->subject = 'HPからのお問い合わせ';
        $this->Email->from = 'test@example.com';
        $this->Email->template = 'contact';
        $this->Email->send();
    }
}

モデルの作成

「app/Model/ContactModel.php」というファイルを作成

<?php
class ContactModel extends AppModel{
    //テータベースのテーブルを使わない
    public $useTable = false;
  //   public $sex = array(
 //        'male' => '男性',
 //        'fmale' => '女性'
 //    );
  public $area = array(
      'area1' => '求人',
       'area2' => '予約',
         'area3' => 'その他',
    );
    //入力チェック
    public $validate = array(
        'name' => array(
            'maxLength' => array(
                'rule' => array('maxLength','50'),
                'allowEmpty' => false,
                'message' => '名前は50文字以内で入力してください'
            ),
            'notEmpty' => array(
                'rule' => array('notEmpty'),
                'message' => '名前を入力してください'
            )
        ),
         'area' => array(
            'rule' => array('multiple', array('min' => 1)),
            'required' => true,
            'message' => 'ご用件を選択してください'
        ),
        'email' => array(
            'email' => array(
                'rule' => array('email',true),
                'message' => 'メールアドレスを正しく入力してください'
            ),
            'notEmtpy' => array(
                'rule' => array('notEmpty'),
                'message' => 'メールアドレスを入力してください'
            )
        ),
 //        'sex' => array(
  //           'rule' => array('notEmpty'),
 //            'message' => '性別を選択してください'
 //        ),
     'area' => array(
        'rule' => array('multiple', array('min' => 1)),
       'required' => true,
           'message' => 'ご用件を選択してください'
         ),
        'text' => array(
            'maxLength' => array(
                'rule' => array('maxLength','500'),
                'allowEmpty' => false,
                'message' => '内容は500文字以内で入力してください'
            ),
            'notEmpty' => array(
                'rule' => array('notEmpty'),
                'message' => '内容を入力してください'
            )
        )
    );
}

メールテンプレートの作成

「app/Model/ContactModel.php」というファイルを作成

以下の内容を送信しました。
  
名前:<?php echo $data['name'] ?>
  
メールアドレス:<?php echo $data['email'] ?>
  
ご用件:<?php foreach($data['area'] as $k => $v){$area_tmp[$k] = $area[$v];} echo implode(',',$area_tmp); ?>
  
内容:
<?php echo $data['text'] ?>
 
ーーーーーーーーーーーーーーーーーーーー


こちらの記事も読まれてます。