Jsヘルパーを使用してAjax更新
更新処理でページ遷移を伴う場合、ページ全体をレスポンスするのに対して、Ajax処理ではページの一部のレスポンスが可能となるためサーバからの通信量を抑えることが可能となります。
Jsヘルパーを使用して、簡単なサンプルを作成しました。(デモ)
[追] 2.2版でも作成しましたので参照ください。(こちら)
head
JQuery本体をロードして下さい。
<?php // jQuery echo $html->script( 'jquery.min.js', array( 'inline' => 'false')); // Jsヘルパーが生成するJSを出力させる echo $this->Js->writeBuffer( array( 'inline' => 'true')); ?>
ビュー (View)
// app/views/ajax/dispajaxupdate.ctp <?php echo $form->create( 'Testtable', array( 'type'=>'post')); echo $form->text( 'data'); echo $this->Js->submit( 'Update', array( 'url'=>'ajax/ajaxupdate', 'update'=>'#result-ajaxupdate')); echo $form->end(); ?> <div id="result-ajaxupdate"></div>
'url' ... Ajax処理で呼び出すURL(controller/action)
'update' ... ajax更新の結果を出力する要素
コントローラ (Controller)
// [app/controllers/ajax_controller.php] <?php class AjaxController extends AppController { var $name = 'Ajax'; var $uses = array( 'Testtable'); var $helpers = array( 'Js'); function dispajaxupdate(){} function ajaxupdate(){ // Ajax or not if (!$this->RequestHandler->isAjax()){ $this->redirect( 'ajax/dispajaxupdate'); } // save OK if ($this->Testtable->save( $this->data)) { $this->render( '/elements/ajax/ajaxupdated', 'ajax'); // save NG } else { $this->set( 'valerror', $this->Testtable->validationErrors); $this->render( '/elements/ajax/ajaxupdated', 'ajax'); } } } ?>
(Ajaxという名前でなくてもいいです。)
$this->RequestHandler->isAjax()
Ajaxかどうかを判定します。urlに'ajax/ajaxupdate'と手入力してアクセスした場合は、'ajax/dispajaxupdate'へリダイレクトされます。
エレメント (Ajax処理の結果を返す)
// app/views/elements/ajax/ajaxupdated.ctp <?php if (!empty( $valerror['data'])){ echo $valerror['data']; } else { echo h( $this->data['Testtable']['data']); } ?>
モデル (Model)
// app/models/testtable.php <?php class Testtable extends AppModel { var $name = 'Testtable'; var $useTable = 'testtables'; var $validate = array( 'data' => array( 'maxlength' => array( 'rule' => array( 'maxlength',255), 'message' => 'text is too long'), 'notempty' => array( 'rule' => array( 'notempty'), 'message' => 'Enter text'), ), ); } ?>
関連記事
-
CakePHP 1.3 インストール
使い古されている手ではありますが、表題の件とレンタルサーバへの配置方法などにも使えますので参考にしていただけたらと思います。 まずはレンタルサーバでCakePHPを動作させる CakePHPア
-
Cookieログイン
今回は、「keep me logged in」などログイン画面でよくみかけるクッキーログインの機能を使ってみます。 CakePHPには、Cookieコンポーネントがあります。(PHPのsetcook
-
シンプルに設置できる数字Captcha「MathCaptcha」
スパム防止などで利用されているCaptchaですが、数字版で使えるものがないか探してみました。 この「MathCapthca」は非常にシンプルに設置できるのはいいですが、やっぱりクエスチョンの部分は
-
validateErrors と validationErrors
CakePHP試験中に気付いたことがあって、メモです。 $this->validateErrors自身バリデーション処理している 今まで、save時にバリデーションエラーメッセージををログに出力し
-
複数データベースの追加と切替
CakePHPで複数のデータベースに切替を行うということがあると思います。(個人的にはあまりない) 今回、CakePHPからWordpressのデータベースへの接続を行う機会があったので設定を試して
-
ユーザ登録(仮登録・メール・本登録)
ここ最近は、メールアドレスだけでなく、SNSのアカウントと連携してユーザ登録することもできるWebサービスが増えてきましたね。ユーザは割合としてどちらを選んでるのか気になるところですが。私はできるだけ
-
Htmlヘルパー
ソース:\cake\libs\view\helpers\html.php charset / 文書の文字コードを設定する <?php echo $this->Html-
-
フィールド単位でバリデーション無効化
save処理の際に条件付でモデルのバリデーションをフィールド単位でスキップする処理のメモです。(最終的に使うことはなかったのでメモ) 関数は unset( $this->->validate[
-
Secutiryユーティリティ
CakePHPでは、データのハッシュ化もしくは暗号化のためのメソッドSecurityユーティリティが用意されています。 ソース: /cake/libs/security.php Security:
-
ビルトインされたバリデーションルール
CakePHP標準で多くのバリデーションルールが搭載されています。 ソース:/cake/libs/validation.php email / maxLength / minLength /