Cakephpのコントローラーでpaginateをトップページに飛ばす

ページ制御 — CakePHP Cookbook 2.x ドキュメント
であるように存在しないページにアクセスされた時の処理を書いてみました

試行錯誤した結果、これで..

$this->Paginator->settings = $paginate;
try {
    $companies =  $this->Paginator->paginate($mainModel);
} catch (NotFoundException $e) {
    $whiteList = $this->Paginator->whitelist;
    $key = array_search('page', $whiteList);
    if ($key !== false) {
        unset($whiteList[$key]);
    }
    $this->Paginator->whitelist = $whiteList;
    $companies =  $this->Paginator->paginate();
}

whiteListからpageを外してpageの指定を無視させてます
アドレスが
http://sample.net/page:2
とか残ったままですが、最初のページ(page:1)が表示されます

うーん、もっといいやりかたがあるような気がします

CakephpでModelのデータベースアクセスをsqlで確認する

Cakephpでモデルにアソシエーションたくさんつけたり、検索条件たくさんつけたりすると
ちゃんとデータがとれるか不安なので、sqlで確認したい..ときには

$data = $this->SampleModel->find('all);

$sqlLog = $this->SampleModel->getDataSource()->getLog(false, false);
debug($sqlLog);

とすると生のSQLが表示されて安心です

CakephpでJsController could not be foundのエラー

Cakephpのプロジェクトを落としてきて動かしてたらエラーが
AppControllerでエラーがとかでしたが結局

JsController could not be found

ってことらしい

そんなコントローラーあったか..と思っていましたが、jsファイルが足りてなかっただけでした
不足していたjavascriptのファイルを足せば、でなくなりました

Cakephpでajaxを使って非同期にすっきりpostする clickイベント版

Cakephpでajaxを使って非同期にすっきりpostする | bgbgbg
ではsubmit buttonを使って、submit時にformをserializeして送ってました

buttonのidをshowbtnを指定して

$('#showbtn').click(function() {                                                               
    event.preventDefault();                                                                       
    event.stopPropagation();                                                                      

    $.ajax({                                                                                      
        type: 'POST',                                                                             
        url: '<?php echo $this->Html->Url(array('action'=>'save'));?>',                   
        data: { data: $('form').serialize() },                                                      
    }).done(function(data) {
        // 後処理                                                                      
    });                                                                                           
});

$(‘form’).serialize()でformの内容がとれます