【CakePHP1.1】
ページ送り機能の基本版です。
http://bakery.cakephp.org/articles/view/pagination-component
上記ソースを app/controllers/components/pagination.php に設置します。
http://bakery.cakephp.org/articles/view/pagination-helper
上記ソースを app/views/helpers/pagination.php に設置します。
http://bakery.cakephp.org/articles/view/pagination-element
上記ソースを app/views/elements/pagination.thtml に設置します。
コントローラーに下記のように書きます。
<?php
class SamplesController extends AppController
{
var $uses = array('Sample');
var $components = array ('Pagination');
var $helpers = array('Pagination');
function index() {
$conds = NULL;
list($order,$limit,$page) = $this->Pagination->init($conds);
$data = $this->Sample->findAll($conds, NULL, $order, $limit, $page);
$this->set('data',$data);
}
}
ビューは下記のように書けば、ページ送りが表示されます。
<?php e($this->renderElement('pagination')); ?>
細かい内容を変更する場合は、設置したヘルパーなどを変更します。
CakePHP は規則に沿ったやり方でやる分には、色々と省略して書けたりしてかなり便利です。
一方、その規則から外れたやり方をやりたい時は??となってしまうこともあります。
今回はあるコントローラーから、別のコントローラーに属するビューを呼び出す方法の紹介です。
アクション(sample)のビューを呼び出す場合
$this->render('sample'); // 無くてもOK
同じコントローラー内の別アクション(other_sample)のビューを呼び出す方法
$this->render('other_sample');
別のコントローラー(tests)のビューを呼び出す方法
$this->render('../tests/sample');
これで呼び出せます。
別のビューを呼び出して、そのコントローラーのビューが一つもない場合でも、app/views にフォルダだけはいるので要注意です。
テーブルの設計が途中で変更になることがあると思います。
そういったときに気をつけなければならない事があります。
CakePHP では、app/tmp/cache/models/ 以下にモデルの情報がキャッシュされますので、既存テーブルにカラム追加や変更、削除を行っても、ここのファイルが変わらない限り、昔のテーブル構成のまま動こうとします。
ですので、ここのファイル(items モデルなら default_items)を削除することを忘れないようにしましょう。
CakePHP で開発されたサイト(日本)をまとめています。
![]() |
![]() |
![]() |
![]() |
|||
| ニンテンドーDSコミュニティサイト DS Family | †フェイス女学園† (顔診断サービス) | ホッテントリメーカー | 今週のハイライト - デザイン系ソーシャルニュースサイト インデザ.jp |
![]() |
![]() |
![]() |
![]() |
|||
| TrekNavi.com GPSのトラックログや手描きによって地図を作成・公開・共有または非公開地図を作成できるサイト | 名言・名セリフ投稿サイト ~ナポレオンからガンダムまで~- あの人のセリフ | 自主申告型タイムトライアルサイト 自転車でヒルクライムしようぜ! | 幕末古写真ジェネレーター -写真を江戸〜明治期の古写真ぽくします- |
![]() |
![]() |
![]() |
![]() |
||||
| 薬剤師求人.com : 薬剤師・薬学生限定の求人・就職・転職サイト | みんなで作る話題発見サイト トピックイット | 就職案内ネット一六社 | 飲食店案内ネット一六社 |
![]() |
![]() |
![]() |
![]() |
||||
| amp アマゾンマーケットプレイス出品者一覧検索 まとめ買い 大人買い | ラーメンネット一六社 | タクシー乗務員募集 タクルート | 県ニュース |
![]() |
![]() |
![]() |
![]() |
||||
| Giraffe Windows ケータイアプリカタログ | 語学学習サービス - BlueOWL | 沖縄旅行は全日空・ANAで行く格安旅行のスカイツアーズ | PHP Webアプリケーション開発のモード・エー(mode-A) |
![]() |
![]() |
![]() |
![]() |
||||
| 格言 名言集 - 言霊.in | 新刊案内ネット一六社 | 書店案内ネット一六社 | スノーボード一六社 |
![]() |
![]() |
![]() |
![]() |
||||
| ゆるゆるプロフ型掲示板 - ミルフィール - | ポイミ! - ちょっとだけ匿名の文章投稿サイト - ミルフィール - | 教室・塾案内ネット一六社 | ブレイクダンスサイト「B-BOYING.NET」 |
![]() |
![]() |
![]() |
![]() |
||||
| 【連想くん】あなたの連想をサポートするサイト | エトワール バレエが好きな人のための総合サイト | 赤い糸DS | モバロケ |
![]() |
![]() |
![]() |
![]() |
||||
| ☆オーラカメラ☆(顔からわかるオーラ診断サービス) | 「あとで買うかも!?」買い物情報収集サイト | 日本のweb系企業まとめ | Ckr!(ちぇけら!)~ マイミクとペア占い☆ |
![]() |
![]() |
![]() |
![]() |
||||
| 東方神起のペン(ファン)交流サイト「東方神起-X-」 | @大喜利 ブログに貼れる大喜利ブログパーツ | オートキャンプ一六社 | 温泉データベース|みんなで作る全国温泉マップ |
![]() |
![]() |
![]() |
![]() |
||||
| フットサル一六社 | 地域特産品 ネットショッピング e-shop一六社 | 美容室案内ネット一六社 | 宿泊案内ネット一六社 |
![]() |
![]() |
![]() |
![]() |
||||
| 空港案内ネット一六社 | リゾートコンシェルジュ | 癒しの言葉~彼女に言ってもらいたい~ | 葬儀ネット一六社 |
![]() |
![]() |
![]() |
![]() |
||||
| 佐川急便株式会社 | 羽田空港ターミナル BIG BIRD | みんなの古民家スポットコミュニティ「ふるみる」 | タクシーコール一六社 |
![]() |
![]() |
![]() |
![]() |
||||
| スキー一六社 | トランクルーム一六社 | 菓写メ | お手軽メール送信サービス「clipmail」 |
![]() |
![]() |
![]() |
![]() |
||||
| 訳あり商品検索サイト「ワケありーな」 | 名前をつけてやる | 割り勘電卓 | テレビで紹介されたものをまとめた「テレビでみたよ」 |
![]() |
![]() |
![]() |
|||||
| Twitterで簡単家計簿「つぶやけ~ぼ」 | お出かけする時に寄り道しちゃおー「よりみち」 | たまにはジャケ買いなんてどう?「ジャケ買い」 |
※他にもあるよ!という方はぜひコメントください。
まず、ビューにこのように書きます。
<?php e($html->submit(' 前の画面に戻る ', array('name' => 'submit_back'))); ?>
続いて、コントローラーにこのように書いて、入力画面のビューを呼び出します。
// 戻るボタンクリック時
if (!empty($this->params['form']['submit_back'])) {
$this->render(入力画面のビュー);
return;
}
CakePHP1.1
モデルのデータを出力する場合に HtmlHelper::tagValue を利用しますが、
<?php e($html->tagValue('Sample/name')); ?>
とすると、エスケープ処理がされないまま出力されてしまいます。
ですので、
<?php e(h($html->tagValue('Sample/name'))); ?>
としましょう。
CakePHP1.1
CakePHP には標準で、空かどうか、数値かどうかなど、幾つかのチェック方法が用意されています。
ですが、あえてそれを使わずに下記のように書きます。
<?php
class Sample extends AppModel {
/**
* 入力チェック
*/
function validates($data = array())
{
$validate_flg = 0;
if (empty($data)) {
$data = $this->data;
}
$name = $data['Sample']['name'];
if (empty($name) && $name != '0') {
$this->invalidate('name');
$validate_flg = 1;
} elseif (*********) {
// 色々なチェック
}
if ($validate_flg == 0) {
return true;
} else {
return false;
}
}
}
このように name という項目に対してチェックする内容を一箇所に集約することで、見やすくなったと思いませんか?
CakePHP1.1
app/config/core.php 内にセキュリティレベルを設定する CAKE_SECURITY という項目があります。
この項目には high / medium / low の3パターンの設定が可能です。
それぞれの違いは下記の通りです。
セッションの有効期限
セッションクッキーの生存期限
session.referer_checkの設定
sessionのチェックなどに使う時間設定
ログの出力方法は
$this->log(メッセージ, LOG_DEBUG);
これだけで出来ます。
出力先は、
app/tmp/logs/debug.log
になります。
INSERTしたIDは、下記の方法で取得できます。
$id = $this->Model->getLastInsertID();
CakePHP1.1
CakePHP で存在しない URL を実行された時に表示されるページは cake/libs/view/templates/errors/error404.thtml の内容が表示されます。
このページを変更したい場合は、app/views/errors/error404.thtml にコピーして内容を変更すれば良いです。
CakePHP1.2 RC2
デフォルトでは、cake/libs/view/errors/error404.ctp の内容が表示されます。
変更したい場合は、app/views/errors/error404.ctp にコピーして内容を変更すれば良いです。
通常のアソシエーションのやり方だと、必要ない時に外すという処理が必要になってきます。
そのテーブル単体のデータが欲しい頻度とアソシエーションしたデータが欲しい頻度の比率にもよると思いますが、単体のデータを取得する方が多い場合は、こちらのやり方が良いのではないでしょうか。
また、通常のアソシエーションの場合、結合させるキーは決まっています。
任意のキーで結合したい場合はなかなかうまくいきません。
そんな時も今回の方法だとうまくいきます。
まずはアソシエーションの準備として、app/app_model.php に下記の内容を追加します。
<?php
class AppModel extends Model
{
// アソシエーションの設定
public function expects($array)
{
foreach ($array as $assoc) {
$this->bindModel(
array($this->assocs[$assoc]['type'] =>
array($assoc => $this->assocs[$assoc]))
);
}
}
}
どのモデルとどの形式でアソシエーションさせるかを設定します。
<?php
class Sample extends AppModel
{
// アソシエーション設定
public $assocs = array(
// 商品マスタ
'Item' => array(
'type' => 'hasAndBelongsToMany',
'className' => 'Item',
'joinTable' => 'samples_items',
'foreignKey' => 'sample_id',
'associationForeignKey' => 'item_id',
),
);
type の部分に他のアソシエーションの形式(hasOne など)も設定できます。
そのままアソシエーションさせる場合は、下記のようにすることで呼び出すことが出来ます。
$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();
キーを変更する場合
$this->Sample->primaryKey = 'item_id'; // キーの変更
$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();
$this->Sample->primaryKey = 'id'; // キーを元に戻す
Item テーブルに対して条件を指定したい場合
$this->Sample->assocs['Item']['conditions'] = array('name' => 'hoge');
$this->Sample->expects(array('Item'));
$data = $this->Sample->findAll();
統一で使える条件はモデルに直接記載し、可変の条件はコントローラで指定すれば良いですね。
参考:使用するアソシエーションをコントローラで決める[CakePHP]
CakePHP で PostgreSQL を利用する場合、デフォルトのままだと持続的接続(pg_pconnect)になっています。
持続的接続を解除したい時は、明示的に指定しなければなりません。
CakePHP1.1
var $default = array('driver' => 'postgres',
'connect' => 'pg_connect',
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'project_name',
'prefix' => '');
'connect' の設定を 'pg_pconnect' とすると、持続的接続になります。
CakePHP1.2
var $default = array('driver' => 'postgres',
'persistent' => false,
'host' => 'localhost',
'login' => 'user',
'password' => 'password!',
'database' => 'project_name',
'prefix' => '');
'persistent' の設定を true とすると、持続的接続になります。
CakePHPをさらにDRYにする、ドライケーキレシピ akiyan.com 秋田真宏
DRY = Don't Repeat Yourself(繰り返し書くな)
どのあたりまでやるかは問題ですが、基本的には DRY にしていくべきだと思います。
CakePHP では標準で、色々な関数の短縮形が用意されています。
開発スピードとソースコードの見やすさを向上してくれます。
| 短縮形 | 基本形 |
|---|---|
| a() | array() |
| am() | array_merge() |
| e() | echo() |
| low() | strtolower() |
| up() | strtoupper() |
| r() | str_replace() |
| h() | htmlspecialchars() |
| pr() | print_r() |
※pr() は DEBUG が 1 以上でないと機能しません。
CakePHPで logs や cache など頻繁に利用するフォルダのパスは cake/config/paths.php に予め設定されています。
app/tmp/logs/ = LOGS
app/tmp/cache/ = CACHE
これを使うことで、ソースコードの見やすさが変わってきますので、ぜひ使うようにしましょう。
loadModelを使うことでモデルを呼び出すことができます。
<?php
loadModel('Model1');
loadModel('Model2');
class SamplesComponent extends Object
{
function hoge() {
$dbo_model1 = new model1();
$dbo_model2 = new model2();
$data1 = $dbo_model1->find();
$data2 = $dbo_model2->find();
}
}
モデルを複数呼び出す時は上記のようにloadModelを2つ並べて書きます。
find などの処理は上記の方法でも可能ですが、Model に書いたバリデーションを絡めた動きにしたい時は上記の方法ではうまくいきません。
その場合は、下記の方法で Model を呼び出します。
<?php
class SamplesComponent extends Object
{
function startup(&$controller){
$this->controller = $controller;
}
function hoge($data) {
$this->controller->Model1->validates($data);
}
}
afterRenderメソッドを使うと、ビューの表示を後から変更することができます。
ただし、レイアウトファイルの変更はできません。
CakePHPをインストールした後、開発する前にやっておきたい内容をまとめておきます。
(少しずつ加えていきます)
もちろん付けない設定も可能で、どちらかに統一させる方が良いと思います。
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;
}
}
}
app/config/tags.ini.php を作成し、そのファイルに下記の内容を記載します。
radio = "<input type="radio" name="data[%s][%s]" id="%s" %s /><label for="%s">%s</label>"
そして、cake/libs/view/helpers/html.php を app/views/helpers/html.php にコピーします。
そのファイル内の下記の部分を修正します。
//修正前
$out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $optTitle);
↓
//修正後
$out[] = sprintf($this->tags['radio'], $this->model, $this->field, $individualTagName, $parsedOptions, $individualTagName, $optTitle);
公開する前であれば、デバック情報を画面上に表示させていても問題ありませんが、公開後はそうはいきません。
ですので、予め指定したファイルにログが書き込まれるように設定しておきましょう。
webroot/index.php
require CORE_PATH . 'cake' . DS . 'bootstrap.php';
// 以下、追加
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);
ini_set('error_log', LOGS . 'error.log');
書き込みを行いたくない時は、log_errors を 0 にすれば書き込みされません。
CakePHP では SQL 文を直接書く機会が少なく、find などの関数を使って処理を行うことがほとんどです。
大変便利なのですが、実際にどのような SQL 文が実行されているかが分かりにくいです。
エラーログと同様に、予めファイルに書き込まれるように組み込んでおけば、公開後の対応が楽になります。
cake/libs/model/dbo/dbo_postgres_log.php を作成します。
<?php
uses ('model' . DS . 'dbo' . DS . 'dbo_postgres'); // 1.1の場合
//uses ('model' . DS . 'datasources' . DS . 'dbo' . DS . 'dbo_postgres'); // 1.2 RC2 の場合
class DboPostgresLog extends DboPostgres {
var $queryNo = 1;
function execute($sql) {
$ret = parent::execute($sql);
if (defined('LOG_SQL') && LOG_SQL) {
$this->log(sprintf("%d. %s", $this->queryNo, $sql), LOG_DEBUG);
$this->queryNo++;
}
return $ret;
}
}
次に、データベース接続設定ファイルで上記のファイルを読み込むように設定します。
app/config/database.php
class DATABASE_CONFIG {
var $default = array('driver' => 'postgres_log',
'host' => '**********',
'login' => '**********',
'password' => '**********',
'database' => '**********',
'prefix' => '');
}
最後に、ログへの出力を行うかどうかの設定をします。
app/config/core.php
define('LOG_SQL', true);
![]() |
![]() |
![]() |
![]() |
|||
| CakePHPをさらにDRYにする、ドライケーキレシピ / akiyan.com 秋田真宏 | CakePHP Lightening Talk / 100SHIKI Webmaster | @nifty トピックイット CakePHP勉強会資料 / nifty 寺元和彦 | CakePHPで開発する時に統一しておきたいコーディング内容 / あつ |
![]() |
![]() |
![]() |
![]() |
|||
| CakePHPのコンポーネントの使い方(080316) / あつ | Cake Php キャッシュのやり方 / あつ | Cake Php ページ送り機能 / あつ | Cake Php パン屋へ行こう / あつ |
![]() |
![]() |
![]() |
![]() |
|||
| addons.mozilla.org CakePHPによるハイパフォーマンスの実現 / 安藤祐介 | Cake PhpでやってみようOpenID入門 / あつ | CakePHP Email Component 調査報告書 / suzuki | CakePHP + Oracle / s-yo-ko |
![]() |
![]() |
![]() |
![]() |
|||
| CakePHP1.1 to 1.2 最新バージョンへの移行の紹介 / 安藤祐介 | CakePHP 2007年大躍進のフレームワーク / 安藤祐介 | CakePHPのHelperを使う Helperの使用方法とかんたんAJAX / 安藤祐介 | CakePHPのModelを使う データベース関連処理をシンプルに解決 / 安藤祐介 |
![]() |
![]() |
![]() |
![]() |
|||
| CakePHPを使う 実装を通じて内部を見る / 安藤祐介 | 続・CakePHP入門 最近の状況と応用機能について / 安藤祐介 | CakePHP入門 PHPでRailsライクな高速開発 / 安藤祐介 | 【動画】~フェイス女学園~ CakePHP を使った効率的なPC・モバイルサイト構築について / スパイスボックスラボラトリ 神部 |
![]() |
![]() |
![]() |
![]() |
|||
| 【動画】CakePHPでの失敗談 / ブルーオーシャン 岡田佳典 | 【動画】CakePHPでホッテントリメーカーとか作ってみた / pha | 【動画】CakePHPゆとり開発環境 / k1LoW | 【動画】OpenIDをAuthComponentにトッピング / 高木(ねねとまつの小部屋) |
![]() |
![]() |
![]() |
![]() |
|||
| 【動画】CakeにTestがやってきた / 岸田健一郎 | 【動画】何が違う? CakePHP and symfony / 安藤祐介 | 何が違う? CakePHP and symfony / 安藤祐介 | OpenIDをAuthComponentにトッピング / 高木(ねねとまつの小部屋) |
![]() |
![]() |
![]() |
![]() |
|||
| CakePHPでの失敗談 / ブルーオーシャン 岡田佳典 | CakePHP で Ajax 入門編 / MICK | Cake Phpでの安全なサイトの作り方1(Sqlインジェクション) / あつ | CakePHPゆとり開発環境 / k1LoW |
![]() |
![]() |
![]() |
![]() |
|||
| CakeにTestがやってきた / 岸田健一郎 | CakePHPハンズオン@Tokyo 夏ケイクをはじめよう(仮) / 安藤祐介 |
何が違う?CakePHP and symfony 違いのわかるbakerになる為の7つのTIP / 安藤祐介 |
「Tplcutter」を用いた超高速ウェブサイト開発(使い方編) / 滝下真玄(MASA-P) |
CakePHP1.1
ユーザー画面と管理画面のレイアウトを変えたい時には、app_controller.phpで設定しておくと便利です。
app/app_controller.php
function beforeFilter()
{
// 管理画面用のコントローラが呼び出された時のみレイアウト変更
if ($this->name == "Kanris") {
$this->layout = 'kanri';
}
}
CakePHPのインストールから開発前までの手順は下記の通りです。
CakePHP1.1
CakePHPから最新版をダウンロードします。
ダウンロードしたファイルを解凍します。
できたファイル群内のapp/webroot/配下のファイルをDocumentRoot直下に設置します。
次に、解凍してできたフォルダ配下のファイル全て(app/webroot/以外)を
DocumentRootと同階層以上にcakephpフォルダを作成し、そこに設置します。
DocumentRoot直下のindex.phpの最上部にROOTとAPP_DIRのパスを追加します。
if (!defined('ROOT')) {
// CakePHPのソース一式を設置したフォルダ
define('ROOT', '/home/sample/cakephp');
}
if (!defined('APP_DIR')) {
define('APP_DIR', 'app');
}
app/tmp/以下全てのパーミッションを777に変更します。
cake/libs/view/templates/pages/home.thtmlをコピーして
app/views/pages/home.thtmlに設置します。
以上で準備は完了です。
app/webroot配下のファイルを設置したのが、DocumentRoot直下でない場合、トップページ以外のページを見ようとしても404エラーが返ってきたりします。
そのような時は、app/webroot配下のファイルを設置した場所にある.htaccessファイルに下記の部分を追加します。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?url=$1 [QSA,L]
RewriteBase /sample/hoge // DocumentRootからのパスを追加する
</IfModule>
CakePHP1.2 RC2
基本の流れは上記と同じですので、違う部分のみ。
app/config/core.php 内の Security.salt の値を適当に変更します。
例えば、体重が80Kg以上かつ100Kg以下の人を抽出したい時のfindAllの書き方は下記の通りです。
$conditions = array('del_flg' => '0', 'AND' => array(array('weight' => '>= 80'), array('weight' => '<= 100')));
$members = $this->Member->findAll($conditions);
「del_flg」はおまけです。
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を使えばできます。
HtmlHelper::dateTimeOptionTag ( $tagName,
$dateFormat = 'DMY',
$timeFormat = '12',
$selected = null,
$selectAttr = null,
$optionAttr = null,
$showEmpty = true
)
Returns a set of SELECT elements for a full datetime setup: day, month and year, and then time.
Parameters:
string $tagName Prefix name for the SELECT element
string $dateFormat DMY, MDY, YMD or NONE.
string $timeFormat 12, 24, NONE
string $selected Option which is selected.
array $optionAttr Attribute array for the option elements.
Returns:
string The HTML formatted OPTION element public
Definition at line 688 of file html.php.
References $elements, and $pos.
使い方はViewに下記の通りに書けば表示されます。
<?php echo $html->dateTimeOptionTag('Sample/name', 'YMD', '24'); ?>
細かい設定は上記のドキュメントの通りです。
この状態だと、「2008-May-1」のように月の部分が英語で表示されるのでhtmlヘルパー内の下記の部分を変更して、日本語(数字)にします。
app/views/helpers/html.php
function monthOptionTag($tagName, $value = null, $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) {
:
// 変更前
// $months = array('01' => 'January', '02' => 'February', '03' => 'March', '04' => 'April', '05' => 'May', '06' => 'June', '07' => 'July', '08' => 'August', '09' => 'September', '10' => 'October', '11' => 'November', '12' => 'December');
// 変更後
$months = array('01' => '1', '02' => '2', '03' => '3', '04' => '4', '05' => '5', '06' => '6', '07' => '7', '08' => '8', '09' => '9', '10' => '10', '11' => '11', '12' => '12');
:
}
「-」も日本語に変更したい場合は、同ファイルの下記の部分を変更します。
app/views/helpers/html.php
function dateTimeOptionTag($tagName, $dateFormat = 'DMY', $timeFormat = '12', $selected = null, $selectAttr = null, $optionAttr = null, $showEmpty = true) {
:
case 'YMD':
// 変更前
/*
$opt = $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty) . '-' .
$this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '-' .
$this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty);
*/
// 変更後
$opt = $this->yearOptionTag($tagName, null, null, null, $year, $selectYearAttr, $optionAttr, $showEmpty) . '年' .
$this->monthOptionTag($tagName, null, $month, $selectMonthAttr, $optionAttr, $showEmpty) . '月' .
$this->dayOptionTag($tagName, null, $day, $selectDayAttr, $optionAttr, $showEmpty).'日';
:
}

CakePHPに関する情報をまとめていきます。
開発スピードがアップできればうれしいです。
>>連絡はこちらへどうぞ
CakePHPを中心とした勉強会を無料で開催していますので、これからCakePHPを始めるという方でもぜひお越しください。
>>詳しくはこちらへ(高蔵寺SE勉強会)
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ガイドブック![]()
CakePHP1.1 ではとても参考にした CakePHP 最初の入門書