モデル編
直接SQL
$this->query('UPDATE `'.$this->tablePrefix.$this->useTable.'` SET `link_ng_count` = `link_ng_count` + 1 WHERE `'.$this->tablePrefix.$this->useTable.'`.`id` = '.$v.';');
重複チェック
//レコード重複チェック
//モデルの中に 太郎 がいれば true
if($this->M->find('first',array('conditions' => array('name' => 'tarou')))){
true;
} else {
false;
}
//モデルの中に 太郎 がいなければ true
if(!$this->M->find('first',array('conditions' => array('name' => 'tarou')))){
true;
} else {
false;
}
モデルで使用するテーブル名を途中で変更
$this->setSourse($table);
日時をSQL形式に変更
フィールド名にはそのモデルの日時形式を持つフィールド名を入れる。
すると$dataを 日時形式に合わせて返す
$data = array( 'year' => 1983, 'month' => 2, 'day' => 22 ); $this->deconstruct($datefieldname,$data);
ユニークかどうかチェック
第一引数にユニークかどうかをチェックしたいフィールドを入れる。
両方ともユニークならtrueが返る。
$res = $this->isUnique(array('id' , 'name'),$or);
//true が返る
コントローラー編
他のアクションを実行
リダイレクトをせずに他のアクションを使える。
ただ、これを使うとコントローラーがぐちゃぐちゃになりそうな気が。。。
function index($id)
{
$this->setAction('add');//addアクションを実行
}
function add($id)
{
echo 'わいですわ。ミナミの萬田いうもんですわ。';
}
postデータから検索クエリを作成
例えば、体重が50KG以上のユーザーのみ検索とか、○○をもつユーザーを検索。
というクエリを作りたい場合に非常に便利。
@$data => post形式の連想配列
@$op => < > とか。=とか。○○以上○○未満みたいな。(null)
@$bool => 'AND' とか 'OR' とか。 (AND)
@$ex => true で利用しないフィールドを指定 (false)
//$this->postConditions($data,$op,$bool,$ex); $data = array( 'User' => array( 'id' => 1 'name' => 'ひでまん', ) ); $op = array( 'id' => '<', 'name' => '=' ); $res = $this->postConditions($data,$op,'OR'); //結果 array( 'OR' => array( 'User.id <' => 1, 'User.name =' => ひでまん ) );
テーマの作成
携帯サイトを作るのに、最適!
http://www.hideblog.net/nikkis/show/125/
cakephp1.2 と cakephp1.3 だとテーマを作成できる。テーマって言うのはビューだけ切り替えるみたいなシステム。夏には夏用デザイン、冬には冬用デザインっていうのも面白いかもしれない。
ビヘイビア
ビヘイビア内のコールバック関数の呼び出し順
//find実行前に呼び出し beforeFind(&$model,$q); //find実行後に呼び出し afterFind(&$model,$results,$primary); //validate前に呼び出し beforeValidate(&$model); //save前 beforeSave(&$model); //save後 afterSave(&$model,$created); //delete前 //beforeDelete(&$model,$cascade = true); //delete後 //afterDelete(&$model); //error発生時 //onError(&$model,$error);
コンポーネント
コンポーネント内のコールバック関数の呼び出し順
//コンポーネント初期化ですぐに呼び出し initialize(&$controller,$settings); //コントローラーのbeforeFileter後にすぐ startup(&$controller); //コントローラー内で render が実行される直前 beforeRender(&$controller); //リダイレクト直前 //@$url => これから実行されるURL //@$status => HTTPコード //@$exit => コントローラー内のexitと一緒 beforeRedirect(&$controller,$url,$status,$exit); //afterfilter後 shutdown(&$controller);
コンポーネント
クライアントのIPアドレスを取得
//true or null or false で取得するIPの格納場所が違う。基本はtrueで。 $this->RequestHandler->getClientIP($safe);
ヘルパー編
フォームヘルパーのボタンを画像にする
//captionにボタン文字列、または/app/webroot/内の画像パスを指定。 $form->submit($caption,$options);
ページネートヘルパーで前のページがあるかをチェック
//false を返せば 1ページ目となる。 $paginator->hasPrev($model);
XMLヘルパー
XMLを簡単に作れちゃうよ♪
RSSヘルパー
RSSを簡単に作れちゃうよ♪
Numberヘルパー:パーセント表示
桁数をちゃんと合わせてくれるのがいいよね。
@$int 数字
@$prec 小数点何桁まで表示?初期値は2
<? echo $number->toPercentage($int,$prec);//10.00% echo $number->toPercentage(10);//10.00% echo $number->toPercentage(0.3);//0.30% ?>
タイムヘルパー
dayAsSql
SQL形式の日時を簡単に作れちゃうよ。
でもヘルパーからSQLをクエリを作るときなんてないよね。。。
グローバル関数編
スラッシュをアンダーバーに変更
よくスラッシュをゲットで渡せないということを言っている方がいるけど、
そういう方は使ってみるのもいいかも。なお重複したスラッシュ//は_になる。
$data = 'http://www.aiura.net/view/'; pr(convertSlash($data)); //http:_www.aiura.net_view
Set関数
XML取得時にデータを取りやすくする
オブジェクト型とかいうのだとデータの操作がややこしい。
それを配列に変更しちゃう。
$api = simplexml_load_file('http://map.yahooapis.jp/LocalSearchService/V1/LocalSearch?appid='.YAHOO_API_ID.'&category=zipcode&p='.urlencode($area));
$api = Set::reverse($api);
多次元配列だろうと並びかえソート
多次元配列のソートはびっくりするほど面倒。
それを一発でやっちゃう素敵なやつ。
Set::sort($array,'/User/id','desc');
動的どこでもバリデーション
わざわざバリデーションをモデルに書きたくないとき、便利。
どこでも使える。
if(Validation::email('abc@example.int')){
return true;
}
HTTPSocket
file_get_contentsも気軽だが、file_get_contents だと拒否するサーバーがある。
そんなときはこのHTTPSocketを使えばデータを取得できる。
App::import('Core','HttpSocket');
$sock = new HttpSocket();
//グーグルで恋愛で検索した結果が戻ってくる
$res = $sock->get('www.google.com/search','q=恋愛');
//$res = $sock->get($uri,$query,$req);
//$res = $sock->post($uri,$data,$req);//なんてのもできる。
pr($res);
こんな所でしょうか。
この程度なら強引に関数作ればやれてしまうんでしょうけど、それでは進歩が無い。
ということでこんなこともできるんだよ程度に知っておくと良いと思いますよ-!



