サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
Wikipedia
cakephp.blog16.jp
CakePHP1.2 RC3 空を許可する値の Validate は、下記の様に allowEmpty に true を渡します。 var $validate = array( // URLチェック 'url' => array( array( 'allowEmpty' => true, 'rule' => array('url'), 'message' => 'URLが正しくないですよ' ), ), );
CakePHP1.2 Shellを利用する時にいつも表示される「Welcome_to_CakePHP~」の文字。 テストでShellを実行する時には特に気にならないのですが、cronやメール受信後の処理を行うときにログに吐き出されるのはちょっと困ります。 そこで、「Welcome_to_CakePHP~」を表示させない方法です。 class SampleShell extends Shell { // 「Welcome_to_CakePHP~」を出さないようにする為にオーバーライド function startup() {} function main() { } } このようにstartupを空でオーバーライドさせてあげれば、メッセージは表示されません。 mickとkumaに教えてもらいました。
CakePHP1.2 次のようにデータを取得すると、 $data = $this->Sample->find('all'); 戻り値はこのような感じになります。 Array ( [0] => Array ( [Sample] => Array ( [id] => 1 [name] => 名前太郎 [memo] => 今日は晴れです ) ) ) ですが、findでfieldsをAS句で指定すると、 $params = array( 'fields' => array( 'name AS namae', ), ); $data = $this->Sample->find('all', $params); 戻り値はこのような感じになります。 Array ( [0] => Array ( [0] => Array ( [namae] => 名前太郎 ) ) ) 先ほどは[Sample]だった部分が
CakePHP1.2 RC2 Model 名が Sample の場合、 App::import('Model', 'Sample'); これでコンポーネントでモデルが使えるようになります。
CakePHP1.2 URLにパラメータをつけるような場合、下記のようにするとそれぞれの値が簡単に取得できます。 例えば、このようなURL。 http://example.com/test/index/lat:139.745407/lng:35.659266/ 「***:xxx」のように「***」項目名、「xxx」パラメータとします。 そして、Controller側で下記のようにすることでパラメータが取得できます。 class TestController extends AppController { var $uses = array(); function index() { $lat = $this->params['named']['lat']; // 緯度 $lng = $this->params['named']['lng']; // 経度 } }
CakePHP1.2 findの条件文にORを使いたい場合は、このように配列で渡します。 $params = array( 'conditions' => array( 'or' => array( array('status' => '1'), array('status' => '2'), ), ), ); $data = $this->Sample->find('all', $params);
Explain SQL Component for Debugkitではまったポイント。 1.headタグは小文字で書く headタグは小文字で書きましょう。 headタグを見つけて下記のタグを生成しています。 <link rel="stylesheet" type="text/css" href="/debug_kit/css/debug_toolbar.css" /><script type="text/javascript" src="/debug_kit/js/js_debug_toolbar.js"></script> HEADのように大文字で書くと、上記タグが生成されないので、要注意です。 厳密にいえば、終了タグの方で判断しているので、そちらが小文字になっていれば表示されます。 2.layoutを設定する 時々、$this->layout = false; のようにレイアウトを
CakePHP1.2 RC3 1.2 では Form ヘルパーの dateTime を利用すると簡単にセレクトボックスを作成することができます。 <?php e($form->datetime('date', 'YMD', 'NONE', '2008-10-10', array('minYear' => 2008, 'maxYear' => date('Y'), 'monthNames' => false), false)); ?> CakePHP1.1 日付のセレクトボックスを作るには、hlmlヘルパーのdateTimeOptionTagを使えばできます。 APIドキュメント HtmlHelper::dateTimeOptionTag ( $tagName, $dateFormat = 'DMY', $timeFormat = '12', $selected = null, $selec
CakePHP1.2 RC2 SSL接続を必須にするには Security コンポーネントを利用します。 class SampleController extends AppController { var $components = array('Security'); function beforeFilter() { // エラー時の呼び出し関数指定 $this->Security->blackHoleCallback = '_sslFail'; // 全アクションを SSL の対象にする $this->Security->requireSecure(); } /** * SSL呼び出しエラー処理 */ function _sslFail($err) { if ($err === 'secure') { $this->redirect('https://**********.com/
CakePHP1.2 RC2 flash メソッドはちょっとしたメッセージを表示する際に便利な機能です。 ただ、そのままの状態では、layout が固定されており、色々なページで使いまわすには、不便を感じることがあります。 そこで、flash メソッドに少し手を加えます(app_controller.php に flash メソッドを作成します)。 [app/app_controller.php] function flash($message, $url, $pause = 1, $layout = null) { $this->autoRender = false; $this->set('url', Router::url($url)); $this->set('message', $message); $this->set('pause', $pause); $this->set(
CakePHP1.2 RC2 $this->bindModel(array('hasOne' => array('Sample')), false); 第二引数に false を渡すことでアソシエーションの状態を維持しつつ、ページ送り機能を実現することができます。 参考:Controller:aginate() でアソシエーションを有効にする
CakePHP1.2 RC2 xml データを扱う場合、Controller で下記のようにすると、配列に格納してくれるので、その後の処理がとてもやり易くなります。 uses('Xml'); $file = '/path/to/sample.xml'; $xml = new Xml($file); $xml_array = Set::reverse($xml); ここで注意が必要なことがあります。 xml のデータで名前が小文字で始まるものは、値が存在する場合は、そのまま小文字で渡されてくるのですが、値が空の場合は、先頭の文字が大文字に変更されて渡されます。 どうしてこのような現象が起こるかというと、cake/libs/set.php 内の Set::reverse() の処理において、 $key = Inflector::camelize($child->name); という処理があり、
CakePHP1.2 RC2 通常の find を利用すると、データを配列で取得できますが、一つのカラムのデータのみが欲しい場合は、下記のようにすると便利です。 $conds = array('id' => 1); e($this->Sample->field('name', $conds)); これで"samples"テーブルの"id"が"1"の"name"のみを取得することができます。
CakePHP1.2 RC2 PC と携帯が共存しているサイトで、404 エラーが発生すると通常は PC 用の 404 エラーページが表示されます。 そこで、携帯用の 404 エラーページを表示するために、app_controller.php に下記内容を書きます。 function beforeRender() { if (isset($this->params['prefix'])) { if (isset($this->viewVars['code']) && $this->viewVars['code'] == '404') { $this->viewPath = $this->params['prefix'] . '_' . $this->viewPath; } } } これで、携帯サイトにて 404 が発生した場合は、"prefix" の設定が "mobile" なら、"mob
CakePHP1.2 RC2 携帯版の対応をする時の基本的な内容です。 ここでは、http://example.com/m/ のように /m/ がつくと携帯版になるようにします。 まず、app/config/routes.php に /m/ がついた時の振り分けを記載します。 Router::connect('/m/:controller/:action', array('prefix' => 'mobile')) 続いて、Controller function mobile_sample() { } 通常(PC 用)の Action 名の前に routes.php で設定した prefix + _(アンダーバー)をつけた Action を用意します。 あわせて、View も app/views/samples/mobile_sample.ctp というようなファイル名で設置します。 La
CakePHP1.2 RC2 Webservice Behavior を利用して Socket 通信を行うことが出来ます。 まず、app/models/behaviors/ にこちらのファイルを設置します。 次に、Model で Webservice Behavior を呼び出すようにします。 var $actsAs = array('Webservice'); 最後に Controller の Action 内に処理内容を書きます。 $options = array(); $options['port'] = '443'; $options['request']['uri']['scheme'] = 'https'; $result = $this->Test->request('post', array('data' => $data, 'url' => $url, 'options'
CakePHP1.2 RC2 可逆暗号を行うには、PEAR の Crypt_Blowfish を利用します。 app/vendors/ 配下に PEAR で取得した Crypt フォルダを設置。 Controller App::import('Vendor', 'Crypt_Blowfish', array('file' => 'Crypt' . DS . 'Blowfish.php')); $key = 'secret keyword'; $blowfish =& new Crypt_Blowfish($key); $password = 'あかさたた'; // 暗号化 $encrypt= base64_encode($blowfish->encrypt($password)); // 復号化 $decrypt = $blowfish->decrypt(base64_decode($en
テーブルの設計が途中で変更になることがあると思います。 そういったときに気をつけなければならない事があります。 CakePHP では、app/tmp/cache/models/ 以下にモデルの情報がキャッシュされますので、既存テーブルにカラム追加や変更、削除を行っても、ここのファイルが変わらない限り、昔のテーブル構成のまま動こうとします。 ですので、ここのファイル(items モデルなら default_items)を削除することを忘れないようにしましょう。
CakePHP1.2 RC2 $this->redirect('/'); CakePHP1.1 ではこの後に exit; が必要でしたが、これからは内部的にやってくれるので、書かなくて良くなります。
CakePHP1.2 RC2 バリデーションの rule の一つである between を使うときの注意点。 使い方 'sample' => array( array( 'rule' => array('between', 10, 20), ), ), このように Model に書くのですが、なんとなく sample が最小値(10)と最大値(20)の間の値かどうかをチェックしてくれそうですが、実際はバイト数が最小値と最大値の間に入っているかのチェックが行われます。 cake/libs/validation.php function between($check, $min, $max) { $length = strlen($check); if ($length >= $min && $length <= $max) { return true; } else { return fal
CakePHPに関する情報をまとめていきます。 開発スピードがアップできればうれしいです。 >>連絡はこちらへどうぞ CakePHP最新版 CakePHP 1.2.3.8166 CakePHPの書籍 CakePHPによる実践Webアプリケーション開発 CakePHP1.2で作成する人にオススメ。 とても参考になります。 まるごとPHP!(vol.2) 安藤さんの解説が載っています。 AmazonのPagination部分は参考になります。 CakePHPによるWebアプリケーション開発 まだ読んだことありません CakePHPポケットリファレンス CakePHP1.2 でやるなら、これがあると何かと便利♪ CakePHP徹底入門 CakePHP1.2 を今から始めるならここから Fast CakePHP シンプルでわかりやすい CakePHP の入門書 CakePHPガイドブック Cake
CakePHP1.2 RC2 'mail' => array( array( 'rule' => VALID_NOT_EMPTY, 'required' => true, 'message' => '入力してください' ), array( 'rule' => array('email'), 'message' => 'メールアドレスが正しくありません' ), ), 上記のように一つの項目に対して、複数の rule を指定している場合でも、入力が何もないときには、「入力してください」というメッセージが出て欲しいところですが、「メールアドレスが正しくありません」と表示されます。 (メッセージが上書きされて、最後のメッセージが表示されます) 「入力してください」を表示するには、 'mail' => array( array( 'rule' => VALID_NOT_EMPTY, 'require
CakePHP1.2 RC2 RequestHandlerコンポーネントのgetClientIPを呼び出すだけで取得できます。 var $components = array('RequestHandler'); function index() { $ipaddress = $this->RequestHandler->getClientIP(); }
CakePHP1.2 RC2 バリデーションの基本は「バリデーション」を参考にしてください。 空の許可を与えない場合に 'rule' => VALID_NOT_EMPTY と書くだけで一見問題ない動作をしますが、正常なフォームから呼ばれなかった場合など、この値自体が渡されなかった時には、これだけだとスルーしてしまいます。 そこで、空は通さない値の時は、上記に加え、 'required' => true も追加するようにしましょう。
CakePHP1.2 RC2 ページ送りの基本については「ページ送り機能1.2 RC2(基本版)」をご覧ください。 View の「戻る」に条件を追加します。 <?php e($paginator->prev('戻る', array('url' => array('keyword' => urlencode($keyword))))); ?> 1 | 2 | 3 | 4 などのページ番号のリンクに条件を追加します。 <?php e($paginator->numbers( array( 'separator' => ' ', 'modulus' => 14, 'url' => array('keyword' => urlencode($keyword)) ) )); ?> あとは、Controller 側で $keyword に値をセットすることで、ページ送りの各リンクが ~/ke
CakePHP1.2 RC2 CakePHP1.2 ではバリデーション機能が充実されましたので、より使いやすくなったと思います。 Controller バリデーションを呼び出します。 if ($this->Sample->validates()) { } Model <?php class Sample extends AppModel { var $validate = array( 'name' => array( array( 'rule' => 'ruleName', 'message' => 'ルールに従って入力してください。' ), array( 'rule' => array('customFunc', 'hoge'), 'message' => '正しくありません。' ), ), 'memo' => array( array( 'rule' => 'ruleName', '
CakePHP1.1 の時は、ビューの拡張子が .thtml でしたが、CakePHP1.2 になってからは、.ctp となりました。 新規で作成する場合は良いのですが、CakePHP1.1 からの移行を行うとなると、拡張子を変更しなければならないです(もちろんそれ以外の問題も沢山ありますが・・・・)。 と思っていましたが、CakePHP1.2 RC2 では .thtml でも問題なく動作しました(デフォルトは .ctp です)。 これでCakePHP1.1 からの移行もより簡単になりそうですね。
CakePHPをインストールした後、開発する前にやっておきたい内容をまとめておきます。 (少しずつ加えていきます) 1.URLの最後にスラッシュを必ずつける もちろん付けない設定も可能で、どちらかに統一させる方が良いと思います。 app/app_controller.php function beforeFilter() { // URLの最後に/を入れる if (isset($this->params['url']['url'])) { $uri = $this->params['url']['url']; if (substr($uri, -1) != '/') { $this->redirect($uri . '/', 301); exit; } } } 参考:CakePHPでURIの形式を統一する 2.radioボタンの各要素部分をクリックした時にも対象の項目を選択状態にする ap
次のページ
このページを最初にブックマークしてみませんか?
『旧CakePHPクッキング』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く