edo1z blog

プログラミングなどに関するブログです

cakePHP2.3 Ajaxな投稿画面の処理例

Jsヘルパー使ってAjaxなフォームをビューでつくる コントローラーで処理してAjax用ビューに渡す Ajax用ビューを表示先の要素に表示する

以上でございます。

Ajaxなビュー

<?php echo $this->Form->create('JobFile',array('type'=>'file'));?>
<table>
<tr><td>送受信タイプ</td><td><?php echo $this->Form->input('type',array('label'=>false,'type'=>'select','options'=>array('1'=>'送信','2'=>'受信','3'=>'社内向け')));?></td></tr>
<tr><td>相手(お客様)</td><td><?php echo $this->Form->input('customer_id',array('label'=>false,'type'=>'select','options'=>$customer_list,'empty'=>'お客様ではない',));?></td></tr>
<tr><td>相手(候補業者様)</td><td><?php echo $this->Form->input('vendor_candidate_id',array('label'=>false,'type'=>'select','options'=>$vendor_candidate_list,'empty'=>'候補業者様ではない',));?></td></tr>
<tr><td>ファイル</td><td><?php echo $this->Form->input('file',array('label'=>false,'type'=>'file'));?></td></tr>
</table>
<?php echo $this->Js->submit('登録',array('url'=>'add','update'=>'#job_file_add_result','buffer'=>false));?>
<?php echo $this->Form->end();?>

<div id="job_file_add_result"></div>

コントローラー

public function add() {
    if ($this->request->is('post')) {
        $this->JobFile->create();
        $this->JobFile->set($this->request->data);
        if($this->JobFile->validates()){
            if($this->JobFile->save($this->request->data)){
                $this->set('success',true);
            }
        }else{
            $this->set('validation_error', $this->JobFile->validationErrors);
        }
    }
    $this->render('jobfile_add_result','ajax');
}

表示内容ビュー

<?php if(isset($success)):?>
<p class="success">データを登録しました。</p>

<?php else:?>
<p class="error">データ登録ができませんでした。再度お試しください。</p>
<div class="error">

<?php
//バリデーションエラーの表示
if(isset($validation_error) &amp;&amp; $validation_error){
    foreach($validation_error as $error){
        foreach($error as $e){
            echo $e . '<br>';
        }
    }
    echo '<br>';
}
?>

</div>
<?php endif;?>

ちなみに、最初のビューで、ファイル添付できるようになっているが、上記例のコントローラーにファイル登録処理はない。