2010年11月22日

cakephpのマニュアルに載っていない超便利関数

お願いします♪いいねとかつぶやいたりして下さい
 

モデル編



直接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);


こんな所でしょうか。
この程度なら強引に関数作ればやれてしまうんでしょうけど、それでは進歩が無い。
ということでこんなこともできるんだよ程度に知っておくと良いと思いますよ-!
関連するタグ: PHP cakephp MYSQL
あなたにとって有用な記事でしたか?是非ブックマークしておくことをおすすめします。
 




ライブラリを配布しちゃったり
webデザイン
Fireworks
HTMLコーディング
CSS
Dreamweaver
携帯サイト
webプログラム
PHP
正規表現
cakephp
MYSQL
javascript
webマーケティング
adwords
analytics
windows7
ショートカットキー
おすすめ情報
サイト
facebook
ライブラリ
配布
アプリ
iphone
ipad
サーバー
さくらサーバー
全ての記事を読む




トップ - 最新の記事一覧 - お問い合わせ