<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-9038376899609732017</id><updated>2011-04-22T02:54:58.923+09:00</updated><category term='デバッグ'/><category term='バージョン'/><category term='インストール'/><category term='セッション'/><category term='helper'/><category term='アソシエーション'/><category term='ビヘイビア'/><category term='サンプル'/><category term='モデル'/><category term='公開する'/><category term='データベース'/><category term='コントローラ'/><category term='コンポーネント'/><category term='関数'/><category term='ビュー'/><title type='text'>PHP on the Cake !</title><subtitle type='html'>CakePHP のインストール、設定法、使用例。愛すべき駄目プログラム言語・PHP による Web アプリケーションの品質向上の為に。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>55</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5422729735343594603</id><published>2009-01-06T15:29:00.003+09:00</published><updated>2009-01-06T15:40:40.587+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='データベース'/><category scheme='http://www.blogger.com/atom/ns#' term='ビヘイビア'/><title type='text'>全文検索</title><content type='html'>&lt;div&gt;&lt;a href="http://bakery.cakephp.org/articles/view/sphinx-behavior" title="Sphinx Behavior (Articles) | The Bakery, Everything CakePHP"&gt;Sphinx Behavior&lt;/a&gt; - &lt;cite&gt;he Bakery, Everything CakePHP&lt;/cite&gt;&lt;br /&gt;
オープンソースのテキスト検索エンジンSphinxを使うビヘイビア。&lt;br /&gt;
&lt;strong&gt;Sphinxについて&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.ibm.com/developerworks/jp/opensource/library/os-php-sphinxsearch/" title="PHP でカスタム検索エンジンを作成する"&gt;PHP でカスタム検索エンジンを作成する&lt;/a&gt; - &lt;cite&gt;IBM's resource for developers and IT professionals in Japan&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://wiki.livedoor.jp/kindaisis_student06/d/cakePHP%20%A5%AD%A1%BC%A5%EF%A1%BC%A5%C9%B8%A1%BA%F7" title="cakePHP キーワード検索 - 空間情報科学研究室 卒研wiki - livedoor Wiki（ウィキ）"&gt;cakePHP キーワード検索&lt;/a&gt; - &lt;cite&gt;空間情報科学研究室 卒研wiki&lt;/cite&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5422729735343594603?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5422729735343594603/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5422729735343594603' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5422729735343594603'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5422729735343594603'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2009/01/blog-post_06.html' title='全文検索'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-6833397293609608161</id><published>2009-01-05T18:19:00.003+09:00</published><updated>2009-01-06T15:43:43.546+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='データベース'/><title type='text'>WHERE条件文の書き方</title><content type='html'>&lt;div&gt;&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1262&amp;amp;forum=6&amp;amp;post_id=2605" title="&amp;quot;1.2RCのLIKE,BETWEEN,INの書き方まとめ&amp;quot; フォーラム - CakePHP Users in Japan"&gt;1.2RCのLIKE,BETWEEN,INの書き方まとめ&lt;/a&gt; - &lt;cite&gt;CakePHP Users in Japan&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://as.blog16.jp/index.php/2007/09/14/cakephpa_sac_cacac_e_f" title="CakePHPで検索機能 | WEBで地域活性化～岐阜県中津川市加子母から発信☆WEBシステム屋の日記～"&gt;CakePHPで検索機能&lt;/a&gt; - &lt;cite&gt;WEBで地域活性化&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.jamboree.jp/cms/archives/138" title="toyosystem | CakePHPで検索機能の実装を少し楽する"&gt;CakePHPで検索機能の実装を少し楽する&lt;/a&gt; - &lt;cite&gt;toyosystem&lt;/cite&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-6833397293609608161?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/6833397293609608161/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=6833397293609608161' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6833397293609608161'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6833397293609608161'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2009/01/where.html' title='WHERE条件文の書き方'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-6515949350748586237</id><published>2009-01-05T15:48:00.001+09:00</published><updated>2009-01-05T16:56:34.708+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='公開する'/><title type='text'>存在しないコントローラ・アクション・ビューへのアクセス</title><content type='html'>&lt;p&gt;
CakePHPでデバッグを有効にしていると、存在しないURLにアクセスした場合にエラーメッセージが表示される。&lt;br /&gt;
公開時にはデバッグを無効にする。
&lt;/p&gt;
&lt;pre title="CakePHPのデバッグ情報を表示しないようにする"&gt;/* app/config/core.php /*
  &lt;code&gt;define('DEBUG', 2);&lt;/code&gt;  // 変更前
  &lt;code&gt;define('DEBUG', 0);&lt;/code&gt;  // 変更後
&lt;/pre&gt;
&lt;p&gt;
また、このエラーページは「cake/libs/view/errors/error404.ctp」に存在するのでカスタマイズする場合は「app/views/errors/error404.ctp」を作成して行う。
&lt;/p&gt;
&lt;h4&gt;参考&lt;/h4&gt;
&lt;div&gt;&lt;a href="http://www.1x1.jp/blog/2007/11/cakephp_not_print_debuglog.html" title="CakePHP 公開する時はデバッグ情報を出さない | Shin x blog"&gt;CakePHP 公開する時はデバッグ情報を出さない&lt;/a&gt; - &lt;cite&gt;Shin x blog&lt;/cite&gt;&lt;br /&gt;
PageControllerへのルーティング回避。
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://cakephp.blog16.jp/index.php/2008/06/16/p16" title="CakePHPクッキング - 投稿の詳細: 404エラーページをカスタマイズする方法"&gt;404エラーページをカスタマイズする方法&lt;/a&gt; - &lt;cite&gt;CakePHPクッキング&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://blog.katsuma.tv/2008/06/cakephp_12_error_page.html" title="CakePHP1.2のエラーページは仕様が変わってる - blog.katsuma.tv"&gt;CakePHP1.2のエラーページは仕様が変わってる&lt;/a&gt; - &lt;cite&gt;blog.katsuma.tv&lt;/cite&gt;&lt;br /&gt;
その他のエラーページカスタマイズ。
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-6515949350748586237?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/6515949350748586237/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=6515949350748586237' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6515949350748586237'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6515949350748586237'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2009/01/blog-post.html' title='存在しないコントローラ・アクション・ビューへのアクセス'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8551057871303110837</id><published>2008-12-30T17:14:00.003+09:00</published><updated>2008-12-30T17:35:48.371+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='データベース'/><title type='text'>DBの切り替え - database.php</title><content type='html'>&lt;div&gt;&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?forum=8&amp;amp;topic_id=378" title="&amp;quot;複数DBの使い分け・切り替え&amp;quot; フォーラム - CakePHP Users in Japan"&gt;複数DBの使い分け・切り替え&lt;/a&gt; - &lt;cite&gt;CakePHP Users in Japan&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;テスト用・公開用などでDBの切り替えしたり、複数のDBを使い分ける場合。&lt;br /&gt;
「app/config/database.php」に好きなだけ定義。
&lt;/p&gt;
&lt;pre&gt;/* database.php */
&lt;code&gt;&amp;lt;?php
class DATABASE_CONFIG
{
    var $default = array
    (
        'driver' =&amp;gt; 'mysql'
        , 'persistent' =&amp;gt; false
        , 'host' =&amp;gt; 'localhost'
        , 'login' =&amp;gt; 'db_user'
        , 'password' =&amp;gt; 'db_pass'
        , 'database' =&amp;gt; 'db_name'
        , 'prefix' =&amp;gt; ''
    );
    var $test = array
    (
        'driver' =&amp;gt; 'sqlite'
        , 'persistent' =&amp;gt; false
        , 'host' =&amp;gt; ''
        , 'login' =&amp;gt; ''
        , 'password' =&amp;gt; ''
        , 'database' =&amp;gt; 'test.db'
        , 'prefix' =&amp;gt; ''
    );
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;もちろん「&lt;code&gt;database&lt;/code&gt;」だけ別とかも大丈夫。&lt;br /&gt;
モデルの頭に記述。&lt;/p&gt;
&lt;pre&gt;/* モデル */
&lt;code&gt;class Test extends AppModel&lt;/code&gt;
&lt;code&gt;{&lt;/code&gt;
   &lt;code&gt;$useDbConfig = "default";&lt;/code&gt;
   // 又は
   &lt;code&gt;$useDbConfig = "test";&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;CakePHPは複数プロジェクトや巨大なアプリケーションには向かないだろうが、試用などには必要だろう。&lt;/p&gt;
&lt;h4&gt;関連&lt;/h4&gt;
&lt;div&gt;&lt;a href="http://www.1x1.jp/blog/2006/09/cakephp_db_config.html" title="CakePHP 環境に応じてDBの設定を変える | Shin x blog"&gt;CakePHP 環境に応じてDBの設定を変える&lt;/a&gt; - &lt;cite&gt;Shin x blog&lt;/cite&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8551057871303110837?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8551057871303110837/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8551057871303110837' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8551057871303110837'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8551057871303110837'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/12/db-databasephp.html' title='DBの切り替え - database.php'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4121348474888275212</id><published>2008-12-29T13:17:00.008+09:00</published><updated>2008-12-29T14:10:15.066+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='サンプル'/><title type='text'>CakePHPをベースにしたフォトブログ - CheeseCake</title><content type='html'>&lt;p&gt;CakePHP製のPhotoblogシステム：CheeseCakeをXREAサーバにインストールしてみた。&lt;/p&gt;
&lt;h4&gt;CheeseCake&lt;/h4&gt;
&lt;div&gt;&lt;strong&gt;概要&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://www.moongift.jp/2007/01/3266/" title="MOONGIFT: » CheeseCake Photoblog:オープンソースを毎日紹介"&gt;CheeseCake Photoblog&lt;/a&gt; - &lt;cite&gt;MOONGIFT&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;プロジェクトページ&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://cakeforge.org/projects/cheesecake/" title="CakeForge: Cheesecake Photoblog: Project Info"&gt;Cheesecake Photoblog&lt;/a&gt; - &lt;cite&gt;CakeForge&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;公式サイト&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://cheesecake-photoblog.org/doku.php" title="Cheesecake Photoblog Software:home"&gt;&lt;cite&gt;Cheesecake Photoblog Software&lt;/cite&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;デモ&lt;/strong&gt;&lt;br&gt;
&lt;a href="http://cheesecake-photoblog.org/demo/" title="Cheesecake Photoblog Software - Nandi in Mumbai"&gt;Demo&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;ダウンロード&lt;/strong&gt;&lt;br&gt;
&lt;div&gt;&lt;a href="http://cakeforge.org/frs/?group_id=76&amp;amp;release_id=404" title="CakeForge: Cheesecake Photoblog: Project Filelist"&gt;cheesecake + cakephp&lt;/a&gt; - 2.0 Beta 1(更新:2008-07-29 07:34)&lt;br /&gt;ページ下のほう。&lt;/div&gt;
&lt;p&gt;今回はCheesecake + CakePHPまとめてインストール。CheesecakeのみのファイルはCakePHPの「app/」ディレクトリが入ってる。2つの構成は違うように思う。&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;インストール&lt;/strong&gt;&lt;br /&gt;
&lt;ol&gt;
&lt;li&gt;解凍したファイルをアップロード。&lt;br /&gt;(ディレクトリ名を「cheesecake2」から「cheesecake」に変更)&lt;/li&gt;
&lt;li&gt;「http://www.example.com/cheesecake/admin/install/」にアクセスしてインストール＆セットアップ。&lt;br /&gt;
XREAだとエラーが出るので、PHPをCGIモードにする「.htaccess」をWebルートに配置。
&lt;pre&gt;.htaccess
&lt;code title="PHPをCGIモードにする"&gt;AddHandler application/x-httpd-phpcgi .php&lt;code&gt;&lt;/pre&gt;&lt;/li&gt;
&lt;li&gt;データベースの設定をする。(今回はMySQL)
&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YFplKtVt_v4/SVhUsrVExuI/AAAAAAAAAbo/BKNyS6l3nuM/s1600-h/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8901.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 165px;" src="http://1.bp.blogspot.com/_YFplKtVt_v4/SVhUsrVExuI/AAAAAAAAAbo/BKNyS6l3nuM/s320/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8901.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5285067289241372386" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;ユーザの設定をする。ログインのIDとパス、「Name」はサイト名。&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YFplKtVt_v4/SVhWWjCgmXI/AAAAAAAAAbw/dGz_p_G_EkY/s1600-h/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8902.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 150px;" src="http://1.bp.blogspot.com/_YFplKtVt_v4/SVhWWjCgmXI/AAAAAAAAAbw/dGz_p_G_EkY/s320/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8902.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5285069108082153842" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;インストール完了。各自サーバ環境を確認してディレクトリ等の権限をセーフティーに。&lt;br /&gt;下に表示されてるのはCakePHPによるDebug。&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_YFplKtVt_v4/SVhX3zZ7xFI/AAAAAAAAAb4/g7hnMquygCE/s1600-h/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8903.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://1.bp.blogspot.com/_YFplKtVt_v4/SVhX3zZ7xFI/AAAAAAAAAb4/g7hnMquygCE/s320/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8903.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5285070778922681426" /&gt;&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;strong&gt;サイト。&lt;/strong&gt;&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_YFplKtVt_v4/SVhYvaaKIlI/AAAAAAAAAcA/HI200FCsNIs/s1600-h/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8904.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 202px;" src="http://2.bp.blogspot.com/_YFplKtVt_v4/SVhYvaaKIlI/AAAAAAAAAcA/HI200FCsNIs/s320/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8904.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5285071734285410898" /&gt;&lt;/a&gt;
&lt;br /&gt;
&lt;p&gt;CakePHPのデバッグでクエリ結果が表示されてるので「app/config/core.php」のデバッグ設定を変更する。&lt;/p&gt;
&lt;pre&gt;app/config/core.php
&lt;code title="デバッグのレベル"&gt;Configure::write('debug', 0);&lt;/code&gt;&lt;/pre&gt;
&lt;strong&gt;&gt;ログイン画面。&lt;/strong&gt;&lt;br /&gt;
&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_YFplKtVt_v4/SVhZTotj4BI/AAAAAAAAAcI/SujSXrekbt8/s1600-h/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8905.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 82px;" src="http://4.bp.blogspot.com/_YFplKtVt_v4/SVhZTotj4BI/AAAAAAAAAcI/SujSXrekbt8/s320/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8905.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5285072356600176658" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;p&gt;日本語には対応してない様子。&lt;/p&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4121348474888275212?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4121348474888275212/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4121348474888275212' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4121348474888275212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4121348474888275212'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/12/cakephp-cheesecake.html' title='CakePHPをベースにしたフォトブログ - CheeseCake'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_YFplKtVt_v4/SVhUsrVExuI/AAAAAAAAAbo/BKNyS6l3nuM/s72-c/%E3%82%AF%E3%83%AA%E3%83%83%E3%83%97%E3%83%9C%E3%83%BC%E3%83%8901.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8228181363741223832</id><published>2008-12-13T14:25:00.006+09:00</published><updated>2008-12-24T14:35:36.733+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='バージョン'/><category scheme='http://www.blogger.com/atom/ns#' term='コンポーネント'/><title type='text'>ページャー/ページ送り - PEAR::Pager,Pagination,(1.2)Paginator</title><content type='html'>&lt;p&gt;
大量のデータを扱うサイトの場合、ページャーの実装は必要であり、それは実に面倒なことだ。&lt;br /&gt;
普通のPHPサイトではPEAR::Pagerが有名でよく使われるところだろう。
&lt;/p&gt;
&lt;h4&gt;PEAR::Pager&lt;/h4&gt;
&lt;div&gt;&lt;strong&gt;マニュアル&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://pear.php.net/manual/ja/package.html.pager.php" title="PEAR :: Manual :: Pager"&gt;Pager&lt;/a&gt; - &lt;cite&gt;PEAR&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;使い方・サンプル&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.phpbook.jp/pear/pear_pager/" title="ページング(PEAR::Pager) - PEAR入門"&gt;ページング(PEAR::Pager)&lt;/a&gt; - &lt;cite&gt;PHPBook&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://cl.pocari.org/2007-12-02-1.html" title="cl.pocari.org - PEAR::Pager で Digg っぽいページャを作る"&gt;PEAR::Pager で Digg っぽいページャを作る&lt;/a&gt; - &lt;cite&gt;cl.pocari.org&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/44" title="PEAR::Pager ページ番号を PATH_INFO で渡す | Sun Limited Mt."&gt;PEAR::Pager ページ番号を PATH_INFO で渡す&lt;/a&gt; - &lt;cite&gt;Sun Limited Mt.&lt;/cite&gt;
&lt;/div&gt;
&lt;p&gt;CakePHPでの扱いは以下。&lt;/p&gt;
&lt;div&gt;
&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&amp;amp;order=ASC&amp;amp;topic_id=347&amp;amp;forum=9&amp;amp;move=next&amp;amp;topic_time=1170435886" title="&amp;quot;ページネーション&amp;quot; フォーラム - CakePHP Users in Japan"&gt;ページネーション&lt;/a&gt; - &lt;cite&gt;CakePHP Users in Japan&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://pub.ne.jp/Norio/?entry_id=1597978" title="Wheel Of Fortune: Pagerの実装"&gt;Pagerの実装&lt;/a&gt; - &lt;cite&gt;Wheel Of Fortune&lt;/cite&gt;&lt;br /&gt;
-コンポーネント。ファイル一覧をデータとして扱う&lt;/div&gt;
&lt;p&gt;
PEARが使えない環境の場合、CakePHPのPaginationコンポーネントを使う。1.1系。
&lt;/p&gt;
&lt;h4&gt;Pagination&lt;/h4&gt;
&lt;div&gt;&lt;strong&gt;セットアップ&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;&lt;cite&gt;bakery&lt;/cite&gt;の以下リンクからコンポーネント、ヘルパー、エレメントをコピーして各ディレクトリに作成。&lt;/p&gt;
&lt;pre&gt;
&lt;a href="http://bakery.cakephp.org/articles/view/pagination-component" title="Pagination Component (Articles) | The Bakery, Everything CakePHP"&gt;Pagination Component&lt;/a&gt;→「/app/controllers/components/pagination.php」
&lt;a href="http://bakery.cakephp.org/articles/view/pagination-helper" title="Pagination Helper (Articles) | The Bakery, Everything CakePHP"&gt;Pagination Helper&lt;/a&gt;→「/app/views/helpers/pagination.php」
&lt;a href="http://bakery.cakephp.org/articles/view/pagination-element" title="Pagination Element (Articles) | The Bakery, Everything CakePHP"&gt;Pagination Element&lt;/a&gt;→「/app/views/elements/pagination.thtm」
&lt;/pre&gt;
&lt;div&gt;&lt;strong&gt;使い方&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://d.hatena.ne.jp/s-yo-ko/20080218/1203302648" title="CakePHPでPEAR::Pagerを使わずにページング - Do you CakePHP はてな"&gt;CakePHPでPEAR::Pagerを使わずにページング&lt;/a&gt; - &lt;cite&gt;Do you CakePHP はてな&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://www.jamboree.jp/cms/archives/14" title="toyosystem | CakePHP::Pagenation(ページャ、ページング処理)"&gt;CakePHP::Pagenation(ページャ、ページング処理)&lt;/a&gt; - &lt;cite&gt;toyosystem&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/122" title="CakePHP Pagination まとめ | Sun Limited Mt."&gt;CakePHP Pagination まとめ&lt;/a&gt; - &lt;cite&gt;Sun Limited Mt.&lt;/cite&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;p&gt;
データベース等設定が必要。&lt;br /&gt;
1.2系ではページャーが用意してある。これは更に容易に機能を提供してくれる。&lt;/p&gt;
&lt;h4&gt;Paginate(1.2系)&lt;/h4&gt;
&lt;div&gt;&lt;strong&gt;使い方&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;コントローラで&lt;code&gt;find()&lt;/code&gt;関数の代わりに&lt;code&gt;paginate()&lt;/code&gt;関数を使う。&lt;/p&gt;
&lt;pre&gt;/* コントローラ */
&lt;code title="CakePHPのページング処理には1.2からはpaginatorを使え。 - /halt/Snapshot"&gt;
function index() {
  $this-&amp;gt;paginate['limit'] = 5;
  $this-&amp;gt;set('items', $this-&amp;gt;paginate());
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ページ送りレイアウト「elements/paginator.ctp」を作成。&lt;/p&gt;
&lt;pre&gt;/* 「elements/paginator.ctp」 */
&lt;code title="CakePHPのページング処理には1.2からはpaginatorを使え。 - /halt/Snapshot"&gt;
 &amp;lt;div id='pagination'&amp;gt;
 &amp;lt;?php echo $paginator-&amp;gt;prev('&amp;lt;&amp;lt; '.__('previous', true), array(),null,array('class'=&amp;gt;'disabled', 'tag' =&amp;gt; 'span')); ?&amp;gt;
 | 
&amp;lt;?php echo $paginator-&amp;gt;numbers(). ' | '. $paginator-&amp;gt;next(__('next', true).' &amp;gt;&amp;gt;', array(), null, array('tag' =&amp;gt; 'span', 'class' =&amp;gt; 'disabled')); ?&amp;gt; &amp;lt;/div&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ビューで任意の位置で呼び出す。&lt;/p&gt;
&lt;pre&gt;/* ビュー */
&lt;code title="CakePHPのページング処理には1.2からはpaginatorを使え。 - /halt/Snapshot"&gt;
&amp;lt;?php echo $this-&amp;gt;renderElement('paginator'); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;a href="http://project-p.jp/halt/anubis/blog_show/1017" title="CakePHPのページング処理には1.2からはpaginatorを使え。 - /halt/Snapshot"&gt;CakePHPのページング処理には1.2からはpaginatorを使え。&lt;/a&gt; - &lt;cite&gt;&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://www.cpa-lab.com/tech/Paginator%E3%81%AE%E4%BD%BF%E3%81%84%E6%96%B9%E3%80%82CakePHP1.2" title="Paginatorの使い方。CakePHP1.2 - CPA-LABテクニカル"&gt;Paginatorの使い方。CakePHP1.2&lt;/a&gt;&lt;br /&gt;
-仕様の詳細とデモ:&lt;a href="http://www.spokslog.com/book/paginator_tests/preview/" title="CakePHP: the rapid development php framework: Cakephp1.2のPaginatorのバリエーション"&gt;PaginatorでPaginateしてみた。&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;
Pagenateは本当に便利で楽。ページ送り部分のデザインもエレメントとして分離できるし、使いまわせる。
&lt;/p&gt;
&lt;ins datetime="2008-12-24T14:35:00+9:00"&gt;
&lt;strong&gt;追記：2008/12/24&lt;/strong&gt;
&lt;div&gt;&lt;a href="http://d.hatena.ne.jp/cakephper/20080906/1220684569" title="getで送信されたパラメータを引き継ぐpaginationのやり方 - cakephperの日記(cakePHP1.2ベース)"&gt;getで送信されたパラメータを引き継ぐpaginationのやり方CommentsAdd Star&lt;/a&gt; - &lt;cite&gt;&lt;/cite&gt;&lt;/div&gt;
&lt;/ins&gt;
&lt;div&gt;&lt;a href="http://cakephp-saboten.blogspot.com/2008/10/sqlite3.html" title="PHP on the Cake !: SQLite3を使う(※追記)"&gt;SQLite3を使う&lt;/a&gt; - &lt;cite&gt;PHP on the Cake !&lt;/cite&gt;(2008年10月10日)&lt;/div&gt;
&lt;p&gt;
残念なことにSQLite3を使うための「dbo_source.php」をアップしているとエラーが出てしまう。このファイルが以前のバージョンを基に作られているためだろうか、&lt;code&gt;calculate()&lt;/code&gt;関数が見つからないエラーが表示される。&lt;br /&gt;
デフォルトの「dbo_source.php」からコピーしてアップした「dbo_source.php」に追記すれば表示することは出来る。不具合は不明。以下のようなソース。
&lt;/p&gt;
&lt;pre&gt;/* 「/cake/cake/libs/model/datasources/dbo_source.php」 */
～略～
&lt;code title="Blogger: PHP on the Cake ! - 投稿を作成"&gt;
function calculate(&amp;amp;$model, $func, $params = array()) {
  $params = (array)$params;
  switch (strtolower($func)) {
    case 'count':  if (!isset($params[0])) {  $params[0] = '*';  }
                        if (!isset($params[1])) {  $params[1] = 'count';  }
                        return 'COUNT(' . $this-&amp;gt;name($params[0]) . ') AS ' . $this-&amp;gt;name($params[1]);
    case 'max':
    case 'min' :  if (!isset($params[1])) {  $params[1] = $params[0];  }
                      return strtoupper($func) . '(' . $this-&amp;gt;name($params[0]) . ') AS ' . $this-&amp;gt;name($params[1]); 
                      break;
  }
}
&lt;/code&gt;
～略～&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8228181363741223832?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8228181363741223832/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8228181363741223832' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8228181363741223832'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8228181363741223832'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/12/pearpagerpagination12paginator.html' title='ページャー/ページ送り - PEAR::Pager,Pagination,(1.2)Paginator'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5027251085019977432</id><published>2008-11-25T23:30:00.005+09:00</published><updated>2008-11-26T14:43:09.684+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='サンプル'/><title type='text'>CakePHPを基にしたCMS</title><content type='html'>&lt;p&gt;有名そうなプロジェクトと開発止まってない、情報も見つかったものをピックアップしてまとめ。&lt;br /&gt;
インストールしてみんとす。&lt;br /&gt;
個人的に拡張性が高すぎる規模大きいCMSには惹かれないので多分やらない。開発側としては楽しいだろうし有意義だろうけど、使う側として何していいか解んなくなっちゃうしね。ただのお試しには特に。&lt;/p&gt;
&lt;h4&gt;Wildflower&lt;/h4&gt;
&lt;p&gt;CakePHP製のCMS。&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;公式サイト&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://wf.klevo.sk/"&gt;&lt;cite&gt;Wildflower&lt;/cite&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;解説&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.moongift.jp/2008/10/wildflower/" title="MOONGIFT: &amp;raquo; CakePHPを使ってCMS「Wildflower」:オープンソースを毎日紹介"&gt;CakePHPを使ってCMS「Wildflower」&lt;/a&gt; - &lt;cite&gt;MOONGIFT&lt;/cite&gt;&lt;br /&gt;
デザインされたデフォルトの管理画面、カスタマイズを前提に作られている(解説有り)、CakePHPなので習得が楽。
&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.syuhari.jp/blog/archives/747" title="CakePHP で作成された CMS | Sun Limited Mt."&gt;CakePHP で作成された CMS&lt;/a&gt; - &lt;cite&gt;Sun Limited Mt.&lt;/cite&gt;&lt;br /&gt;
&lt;q cite="http://www.syuhari.jp/blog/archives/747" title="CakePHP で作成された CMS | Sun Limit"&gt;&lt;strong&gt;app 以下にはコントローラもモデルもビューも置いていない&lt;/strong&gt;こと。CMS で使う MVC は app ディレクトリと同じ階層にある wildflower というディレクトリに app ディレクトリと同じ構成で入っています。これはカスタマイズするときに、app 以下にカスタマイズした MVC を入れて、&lt;strong&gt;wildflower の元々のファイルを修正しなくてもいいように出来ている&lt;/strong&gt;ようです。&lt;/q&gt;&lt;/div&gt;
&lt;h4&gt;CheeseCake&lt;/h4&gt;
&lt;p&gt;CakePHP製のPhotoblogシステム。&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;概要&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.moongift.jp/2007/01/3266/" title="MOONGIFT: &amp;raquo; CheeseCake Photoblog:オープンソースを毎日紹介"&gt;CheeseCake Photoblog&lt;/a&gt; - &lt;cite&gt;MOONGIFT&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;プロジェクトページ&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://cakeforge.org/projects/cheesecake/" title="CakeForge: Cheesecake Photoblog: Project Info"&gt;Cheesecake Photoblog&lt;/a&gt; - &lt;cite&gt;CakeForge&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;公式サイト&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://cheesecake-photoblog.org/doku.php" title="Cheesecake Photoblog Software:home"&gt;&lt;cite&gt;Cheesecake Photoblog Software&lt;/cite&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;デモ&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://cheesecake-photoblog.org/demo/" title="Cheesecake Photoblog Software - Nandi in Mumbai"&gt;Demo&lt;/a&gt;&lt;/div&gt;
&lt;h4&gt;Pocky&lt;/h4&gt;
&lt;p&gt;インストールいらず、ディレクトリ設置だけでCakePHP開発環境。&lt;/p&gt;
&lt;a href="http://cakeforge.org/projects/pocky/"&gt;Pocky: CakePHP on a Stick&lt;/a&gt; - &lt;cite&gt;CakeForge&lt;/cite&gt;
&lt;div&gt;&lt;strong&gt;解説&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://cakephp.seesaa.net/article/24604619.html" title="CakePHP のおいしい食べ方: CakePHPフレームワーク開発環境を1分以内で作る方法"&gt;CakePHPフレームワーク開発環境を1分以内で作る方法&lt;/a&gt; - &lt;cite&gt;CakePHP のおいしい食べ方&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.moongift.jp/2006/12/3020/" title="MOONGIFT: &amp;raquo; Pocky:オープンソースを毎日紹介"&gt;Pocky&lt;/a&gt; - &lt;cite&gt;MOONGIFT&lt;/cite&gt;&lt;/div&gt;
&lt;div&gt;&lt;a href="http://www.gloriouslife.sakura.ne.jp/blog/?p=154" title="Glorious Life   &amp;raquo; いい物見つけた"&gt;いい物見つけた&lt;/a&gt; - &lt;cite&gt;Glorious Life&lt;/cite&gt;&lt;br /&gt;
MySQLのインストールも簡単らしい。&lt;/div&gt;
&lt;h4&gt;まんじゅうCMS&lt;/h4&gt;
&lt;p&gt;CloverStudioが開発しているCakePHPで作られたCMS。もちろん日本の人。開発も止まってない。&lt;br /&gt;
共有とカスタマイズを方針として開発。&lt;br /&gt;
現在公開のモジュール・プラグインはブログ、掲示板、フォーム、外部RSS読み込み。&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;公式サイト&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.manjuu.com/"&gt;&lt;cite&gt;まんじゅうCMS&lt;/cite&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;デモ&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://www.manjuu.com/page/demos"&gt;デモ・リンク&lt;/a&gt;&lt;br /&gt;
ブログなどデモ集。&lt;/div&gt;

&lt;h4&gt;関連&lt;/h4&gt;
&lt;p&gt;リンク集。リンク切れや情報がないのが多い。&lt;/p&gt;
&lt;div&gt;
&lt;a href="http://cakephp.seesaa.net/article/51457191.html" title="CakePHP のおいしい食べ方"&gt;php sweets&lt;/a&gt; - &lt;cite&gt;CakePHP のおいしい食べ方&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://cakephp-saboten.blogspot.com/2008/11/cakephp-bakesale.html" title="PHP on the Cake!:CakePHPで作られたショッピングサイト - BakeSale他"&gt;CakePHPで作られたショッピングサイト - BakeSale他&lt;/a&gt; - &lt;cite&gt;PHP on the Cake!&lt;cite&gt;(2008年11月18日記事)&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5027251085019977432?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5027251085019977432/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5027251085019977432' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5027251085019977432'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5027251085019977432'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/11/cakephpcms.html' title='CakePHPを基にしたCMS'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-527909730875486324</id><published>2008-11-18T13:01:00.003+09:00</published><updated>2008-11-18T13:26:40.099+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='サンプル'/><title type='text'>CakePHPで作られたショッピングサイト - BakeSale他</title><content type='html'>&lt;div&gt;&lt;a href="http://cakeforge.org/projects/bakesale/" title="CakeForge: BakeSale: Project Info"&gt;BakeSale&lt;/a&gt; - &lt;cite&gt;CakeForge&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;
CakePHPを基にしたショッピングシステム。&lt;br /&gt;
&lt;strong&gt;ユーザ登録やメール配信、広告管理の機能、会計のシステム、レーティングといった機能はない&lt;/strong&gt;。
&lt;/p&gt;
&lt;div&gt;
&lt;a href="http://www.moongift.jp/2008/09/bakesale/" title="MOONGIFT: » CakePHPを使ったショッピングサイト「BakeSale」:オープンソースを毎日紹介"&gt;CakePHPを使ったショッピングサイト「BakeSale」&lt;/a&gt; - &lt;cite&gt;オープンソースを毎日紹介&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/700" title="CakePHP で作成したショッピングサイト「BakeSale」 | Sun Limited Mt."&gt;CakePHP で作成したショッピングサイト「BakeSale」&lt;/a&gt; - &lt;cite&gt;Sun Limited Mt&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://as.blog16.jp/index.php/2008/09/19/p574" title="CakePHP1.2で作られたBakeSaleを使ってみた | WEBで地域活性化～岐阜県中津川市加子母から発信☆WEBシステム屋の日記～"&gt;CakePHP1.2で作られたBakeSaleを使ってみた&lt;/a&gt; - &lt;cite&gt;WEBで地域活性化&lt;/cite&gt;&lt;br /&gt;
－構築例アリ。
&lt;/div&gt;
&lt;p&gt;アフィリエイト商品紹介サイトにはちょうど良いかも。楽天やAmazonから本とかインテリア見繕って、アフィリエイト貼って日紹介するサイトなど。&lt;br /&gt;
勉強としてソースを見るのも一興かも。&lt;/p&gt;
&lt;p&gt;その他にもショッピングシステムなど以下に一覧。&lt;/p&gt;
&lt;div&gt;&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=421&amp;amp;forum=13&amp;amp;post_id=748#forumpost748" title="&amp;quot;Cakeを使ったCMS土台のまとめ&amp;quot; フォーラム - CakePHP Users in Japan"&gt;Cakeを使ったCMS土台のまとめ&lt;/a&gt; - &lt;cite&gt;CakePHP Users in Japan&lt;/cite&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-527909730875486324?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/527909730875486324/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=527909730875486324' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/527909730875486324'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/527909730875486324'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/11/cakephp-bakesale.html' title='CakePHPで作られたショッピングサイト - BakeSale他'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-9196626646059752645</id><published>2008-11-06T00:16:00.009+09:00</published><updated>2008-11-06T00:41:28.086+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>HTMLヘルパー：image</title><content type='html'>&lt;p&gt;&lt;code&gt;&amp;lt;img&amp;gt;タグの書き方と画像のパスはヘルパーを使って以下のように表現できる。&lt;/p&gt;
&lt;pre&gt;/* View */
  &lt;code&gt;&amp;lt;img src=&amp;quot;&amp;lt;?php echo $html-&amp;gt;webroot(IMAGES_URL.&amp;quot;/logo.png&amp;quot;) ?&amp;gt;&amp;quot; alt=&amp;quot;ロゴ&amp;quot; /&amp;gt;&lt;/code&gt;
  // 出力:&lt;samp&gt;&amp;lt;img src=&amp;quot;/cake/img/logo.png&amp;quot; alt=&amp;quot;ロゴ&amp;quot;&amp;gt;&lt;/samp&gt;
  &lt;code&gt;&amp;lt;?php echo $html-&amp;gt;image(&amp;quot;/logo.png&amp;quot;, array(&amp;quot;alt&amp;quot;=&amp;gt;&amp;quot;ロゴ&amp;quot;)) ?&amp;gt;&lt;/code&gt;
 // 出力:&lt;samp&gt;&amp;lt;img src=&amp;quot;/cake/logo.png&amp;quot; alt=&amp;quot;ロゴ&amp;quot;&amp;gt;&lt;/samp&gt;
&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;IMAGE_URL&lt;/code&gt;は「cake/config/path.php」に定義。&lt;br /&gt;
&lt;code&gt;$html-&amp;gt;link()&lt;/code&gt;の第5引数に&lt;samp&gt;false&lt;/samp&gt;を渡すとエスケープがオフになるので次のようにcode&gt;&amp;lt;img&amp;gt;タグを記述できる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php echo $html-&amp;gt;link($html-&amp;gt;image(&amp;quot;logo.png&amp;quot;), &amp;apos;/&amp;apos;,null,null,&lt;strong&gt;false&lt;/strong&gt;);?&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-9196626646059752645?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/9196626646059752645/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=9196626646059752645' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/9196626646059752645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/9196626646059752645'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/11/htmlimage.html' title='HTMLヘルパー：image'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-7074507634220816818</id><published>2008-10-31T17:40:00.002+09:00</published><updated>2008-10-31T18:17:05.747+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='関数'/><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>フォーム・ヘルパー : error</title><content type='html'>&lt;div&gt;
&lt;a href="http://book.cakephp.org/ja/view/721/error" title="The Cookbook :: 1.2 Collection :: マニュアル :: 組み込みのヘルパー :: フォーム :: Form 要素固有のメソッド :: error"&gt;error&lt;/a&gt; - &lt;cite&gt;The Cookbook :: 1.2 Collection :: マニュアル&lt;/cite&gt;&lt;/div&gt;
&lt;pre&gt;&lt;code title=""&gt;error(string $fieldName, string $text, array $options)&lt;/code&gt;
    バリデーションエラーが起こったイベントで、指定されたフィールドの $text で指定したエラーメッセージを表示
&lt;code&gt;$options = array(
                         &lt;strong&gt;&amp;apos;wrap&amp;apos; =&amp;gt; true&lt;/strong&gt;,
                         &lt;strong&gt;&amp;apos;class&amp;apos; =&amp;gt; &amp;apos;error-message&amp;apos;&lt;/strong&gt;,
                         &lt;strong&gt;&amp;apos;escape&amp;apos; =&amp;gt; true&lt;/strong&gt;
                );&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
「&lt;code&gt;wrap=&amp;gt; true&lt;/code&gt;」であれば指定したエラーメッセージ「&lt;code&gt;$text&lt;/code&gt;」は&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;タグで囲まれる。「&lt;samp&gt;false&lt;/samp&gt;」を指定するとタグで囲まれない。&lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;以外のタグを指定することも出来る。&lt;br /&gt;「&lt;code&gt;class&lt;/code&gt;」は「&lt;code&gt;wrap&lt;/code&gt;」のクラス名を指定する。&lt;br /&gt;
「&lt;code&gt;escape&lt;/code&gt;」はHTMLエスケープ（&lt;code&gt;h($error)&lt;/code&gt;）を行う。
&lt;/p&gt;
&lt;pre&gt;/* ヘルパー */
&lt;code title="フォーム・ヘルパー : error"&gt;&amp;lt;?php echo $form-&amp;gt;error(&amp;apos;App.userId&amp;apos;, &amp;apos;入力エラーです&amp;apos;); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;pre title="フォーム・ヘルパー : error ソース"&gt;「cake/cake/libs/view/helpers/form.php:L365～」
&lt;code&gt;/**
 * Returns a formatted error message for given FORM field, NULL if no errors.
 *
 * @param string $field A field name, like &amp;quot;Modelname.fieldname&amp;quot;
 * @param mixed $text  Error message or array of $options
 * @param array $options Rendering options for &amp;lt;div /&amp;gt;wrapper tag
 *   &amp;apos;escape&amp;apos;  bool  Whether or not to html escape the contents of the error.
 *   &amp;apos;wrap&amp;apos;  mixed  Whether or not the error message should be wrapped in a div. If a
 *      string, will be used as the HTML tag to use.
 *   &amp;apos;class&amp;apos;  string  The classname for the error message
 * @return string If there are errors this method returns an error message, otherwise null.
 * @access public
 */
  function error($field, $text = null, $options = array()) {
    $this-&amp;gt;setEntity($field);
    $options = array_merge(array(&amp;apos;wrap&amp;apos; =&amp;gt; true, &amp;apos;class&amp;apos; =&amp;gt; &amp;apos;error-message&amp;apos;, &amp;apos;escape&amp;apos; =&amp;gt; true), $options);

    if ($error = $this-&amp;gt;tagIsInvalid()) {
      if (is_array($error)) {
        list(,,$field) = explode(&amp;apos;.&amp;apos;, $field);
        if (isset($error[$field])) {
          $error = $error[$field];
        } else {
          return null;
        }
      }

      if (is_array($text) &amp;&amp; is_numeric($error) &amp;&amp; $error &amp;gt; 0) {
        $error--;
      }
      if (is_array($text) &amp;&amp; isset($text[$error])) {
        $text = $text[$error];
      } elseif (is_array($text)) {
        $options = array_merge($options, $text);
        $text = null;
      }

      if ($text != null) {
        $error = $text;
      } elseif (is_numeric($error)) {
        $error = sprintf(__(&amp;apos;Error in field %s&amp;apos;, true), Inflector::humanize($this-&amp;gt;field()));
      }
      if ($options[&amp;apos;escape&amp;apos;]) {
        $error = h($error);
        unset($options[&amp;apos;escape&amp;apos;]);
      }
      if ($options[&amp;apos;wrap&amp;apos;]) {
        $tag = is_string($options[&amp;apos;wrap&amp;apos;]) ? $options[&amp;apos;wrap&amp;apos;] : &amp;apos;div&amp;apos;;
        unset($options[&amp;apos;wrap&amp;apos;]);
        return $this-&amp;gt;Html-&amp;gt;tag($tag, $error, $options);
      } else {
        return $error;
      }
    } else {
      return null;
    }
  }&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-7074507634220816818?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/7074507634220816818/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=7074507634220816818' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7074507634220816818'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7074507634220816818'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/error.html' title='フォーム・ヘルパー : error'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5012310714229915559</id><published>2008-10-31T17:15:00.001+09:00</published><updated>2008-10-31T17:40:25.483+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='関数'/><title type='text'>フォーム・ヘルパー : isFieldError</title><content type='html'>&lt;div&gt;
&lt;a href="http://book.cakephp.org/ja/view/724/isFieldError" title="The Cookbook :: 1.2 Collection :: マニュアル :: 組み込みのヘルパー :: フォーム :: Form 要素固有のメソッド :: isFieldError"&gt;isFieldError&lt;/a&gt; - &lt;cite&gt;The Cookbook :: 1.2 Collection :: マニュアル&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;
個別にバリデーション・エラーを取得する。バリデーションエラーがあれば「&lt;samp&gt;true&lt;/samp&gt;」を返す。それ以外は「&lt;samp&gt;false&lt;/samp&gt;」。
「&lt;code&gt;Modelname.fieldName&lt;/code&gt;」の様に指定する。
&lt;/p&gt;
&lt;pre&gt;/* ヘルパー */
&lt;code title="フォーム・ヘルパー : isFieldError"&gt;&amp;lt;?php if ($form-&amp;gt;isFieldError(&amp;apos;App.userId&amp;apos;)) echo &amp;apos;&amp;lt;div class=&amp;quot;error-message&amp;quot;&amp;gt;入力エラーです&amp;lt;/div&amp;gt;&amp;apos;; ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;pre title="フォーム・ヘルパー : isFieldError ソース"&gt;「cake/cake/libs/view/helpers/form.php:L354～」
&lt;code&gt;/**
 * Returns true if there is an error for the given field, otherwise false
 *
 * @param string $field This should be "Modelname.fieldname"
 * @return boolean If there are errors this method returns true, else false.
 * @access public
 */
  function isFieldError($field) {
    $this-&amp;gt;setEntity($field);
    return (bool)$this-&amp;gt;tagIsInvalid();
  }&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5012310714229915559?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5012310714229915559/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5012310714229915559' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5012310714229915559'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5012310714229915559'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/isfielderror.html' title='フォーム・ヘルパー : isFieldError'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-1992867434790712439</id><published>2008-10-30T17:10:00.002+09:00</published><updated>2008-10-30T17:16:37.920+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='モデル'/><title type='text'>エンティティをモデルに作る（データの加工）</title><content type='html'>&lt;div&gt;&lt;a href="http://wiki.cre8system.jp/index.php?PHP%2FCakePHP%2FCakePHP%A4%CE%A5%E2%A5%C7%A5%EB%A4%F2%A5%A8%A5%F3%A5%C6%A5%A3%A5%C6%A5%A3%A4%C8%A4%B7%A4%C6%B0%B7%A4%A6" title="PHP/CakePHP/CakePHPのモデルをエンティティとして扱う - Happy Engineer Life"&gt;CakePHPのモデルをエンティティとして扱う&lt;/a&gt; - &lt;cite&gt;Happy Engineer Life&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;DBから得られる生のデータを加工して、サイトで必要な意味のあるデータにする。モデルはDBとバリデーションだけじゃない。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-1992867434790712439?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/1992867434790712439/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=1992867434790712439' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1992867434790712439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1992867434790712439'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/blog-post_30.html' title='エンティティをモデルに作る（データの加工）'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8082284625876070006</id><published>2008-10-23T01:30:00.001+09:00</published><updated>2008-10-23T01:33:33.842+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='デバッグ'/><title type='text'>デバック「debug」のレベル</title><content type='html'>&lt;div&gt;&lt;a href="http://www.1x1.jp/blog/2008/10/cakephp_performance_debug_0_2.html" title="Permanent Link: CakePHP debug=0とdebug=2ではパフォーマンスがかなり違う"&gt;CakePHP debug=0とdebug=2ではパフォーマンスがかなり違う&lt;/a&gt; - &lt;cite&gt;Shin x blog&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;それぞれの場合の稼動状況を計測。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8082284625876070006?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8082284625876070006/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8082284625876070006' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8082284625876070006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8082284625876070006'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/debug.html' title='デバック「debug」のレベル'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-2533479879848709434</id><published>2008-10-23T01:02:00.003+09:00</published><updated>2008-10-23T01:28:37.039+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='バージョン'/><title type='text'>CakePHPを1.1から1.2へ上げるときの注意点</title><content type='html'>&lt;div&gt;&lt;a href="http://blog.katsuma.tv/2008/06/cakephp1112.html" title="CakePHPを1.1から1.2へ上げるときの注意点 - blog.katsuma.tv"&gt;CakePHPを1.1から1.2へ上げるときの注意点&lt;/a&gt; - &lt;cite&gt;blog.katsuma.tv&lt;/cite&gt;&lt;/div&gt;
&lt;p&gt;1.1系と1.2系との違いと対処。&lt;br /&gt;簡単に以下に紹介。&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;viewファイルの拡張子を変更&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;ビューファイルの拡張子が「.thtml」から「.ctp」に変更になった。&lt;/p&gt;
&lt;pre&gt;対処法
&lt;code&gt;for file in *; do mv -i $file `echo $file | sed 's/.thtml/.ctp/'`; done&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このコマンドで一気に変更。&lt;/p&gt;
&lt;div&gt;&lt;strong&gt;フォームヘルパの変更&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;フォームヘルパの仕様変更。「&lt;code&gt;$html&lt;/code&gt;」から「&lt;code&gt;$form&lt;/code&gt;」に変更。&lt;/p&gt;
&lt;pre&gt;1.1系&lt;code&gt;&amp;lt;?php echo $html-&amp;gt;input('Timeline/title', ...); ?&amp;gt;&lt;/code&gt;
1.2系&lt;code&gt;&amp;lt;?php echo $form-&amp;gt;input('Timeline.title', ...); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;strong&gt;app/config/routes.php&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;「routes.php」はRouteオブジェクトがRouterクラスに変更。&lt;br /&gt;
「app/config/routes.php」を次のように変更。&lt;/p&gt;
&lt;pre&gt;1.1系&lt;code&gt;$Route-&amp;gt;connect('/home', array('controller' =&amp;gt; 'pages', 'action' =&amp;gt; 'home'));&lt;/code&gt;
1.2系&lt;code&gt;Router::connect('/home', array('controller' =&amp;gt; 'pages', 'action' =&amp;gt; 'home'));&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;&lt;strong&gt;app/config/core.php&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;「&lt;code&gt;define&lt;/code&gt;」で定義していたものが「&lt;code&gt;Configure&lt;/code&gt;」クラスを利用する。&lt;br /&gt;元の「app/config/core.php」を次のように変更。&lt;/p&gt;
&lt;pre&gt;1.1系&lt;code&gt;define('debug', 0);&lt;/code&gt;
1.2系&lt;code&gt;Configure::write('debug', 0);&lt;/code&gt;
&lt;/pre&gt;
&lt;div&gt;&lt;strong&gt;Vendor系ライブラリ&lt;/strong&gt;&lt;/div&gt;
&lt;p&gt;「app/vendors」に配置したサードパーティのライブラリを「app/config/bootstrap.php」から呼び出す方法。&lt;/p&gt;
&lt;pre&gt;1.1系&lt;code&gt;vendor( 'dBug'.DS.'dBug' );&lt;/code&gt;
1.2系&lt;code&gt;App::import( 'Vendor', 'dBug', array('file'=&amp;gt;'dBug' . DS . 'dBug.php') );&lt;/code&gt;
&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-2533479879848709434?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/2533479879848709434/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=2533479879848709434' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2533479879848709434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2533479879848709434'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/cakephp1112.html' title='CakePHPを1.1から1.2へ上げるときの注意点'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-952050336576812389</id><published>2008-10-23T00:40:00.003+09:00</published><updated>2008-10-23T01:02:25.358+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='デバッグ'/><title type='text'>CakePHPアプリケーションの情報を表示 - CakeInfo</title><content type='html'>&lt;div&gt;&lt;a href="http://www.1x1.jp/blog/2008/05/cakephp_cakeinfo_012.html" title=""&gt;CakePHP 1.2beta対応－CakeInfo-0.1.2リリース&lt;/a&gt; - &lt;cite&gt;Shin x blog&lt;/cite&gt;&lt;br /&gt;
CakePHPアプリケーションの内容を&lt;code&gt;phpinfo()&lt;/code&gt;風に見せるCakeInfo&lt;br /&gt;
ディレクトリ構成だとか外部からアクションとして呼べるメソッドを表示&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-952050336576812389?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/952050336576812389/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=952050336576812389' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/952050336576812389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/952050336576812389'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/cakephp-1.html' title='CakePHPアプリケーションの情報を表示 - CakeInfo'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-1041765618905354587</id><published>2008-10-20T15:51:00.002+09:00</published><updated>2008-10-20T16:16:21.976+09:00</updated><title type='text'>フレームワーク・ライブラリの比較</title><content type='html'>&lt;div&gt;&lt;a href="http://q.hatena.ne.jp/1210648408" title="PHP5のフレームワークの選択で悩んでいます。 ZendFrameWork　か、　Symfony　か、　cakePHPかどちらがいいのか意見お願いします。 環境は、PHP５．２．５、Mysql５．１で.. - 人力検索はてな"&gt;PHP5のフレームワークの選択で悩んでいます。&lt;/a&gt;&lt;/div&gt;
&lt;blockquote&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;cakePHP&lt;/strong&gt;
&lt;dl&gt;&lt;dt&gt;利点&lt;/dt&gt;
&lt;dd&gt;手軽&lt;/dd&gt;
&lt;dd&gt;ティップス的な情報はWeb上にたくさんある&lt;/dd&gt;
&lt;dt&gt;欠点&lt;/dt&gt;
&lt;dd&gt;まとまったドキュメントが少ない&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Synfony &lt;/strong&gt;(あまり詳しくないので、間違ってたらごめんなさい）
&lt;dl&gt;&lt;dt&gt;利点&lt;/dt&gt;
&lt;dd&gt;Yahooが採用したこともあり安心？&lt;/dt&gt;
&lt;dd&gt;ドキュメントも充実&lt;/dt&gt;
&lt;dt&gt;欠点&lt;/dt&gt;
&lt;dd&gt;個人的には使い始める際の敷居が高めだった気がする&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ZendFramework&lt;/strong&gt;
&lt;dl&gt;&lt;dt&gt;利点&lt;/dt&gt;
&lt;dd&gt;Zendが提供しているので安心？&lt;/dd&gt;
&lt;dd&gt;ドキュメントが充実&lt;/dd&gt;
&lt;dt&gt;欠点&lt;/dt&gt;
&lt;dd&gt;他の２つと比べてリリース後時間がないため実績が少ない？&lt;/dd&gt;
&lt;/dl&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;pre&gt;
・Zend FrameworkはフレームワークというよりPEARの代わり(Zend_DBはPEAR::DBの代わり、Zend_AuthはPEAR::Authの代わりという感じ)
・Zend_ControllerのRouter（パスを解決する部分）はrails感覚で設定できるのが便利
&lt;/pre&gt;
&lt;div&gt;&lt;a href="http://ecw.seesaa.net/article/81478169.html" title="ECWorks Blog(仮): なぜCakePHPなのか？"&gt;なぜCakePHPなのか？&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-1041765618905354587?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/1041765618905354587/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=1041765618905354587' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1041765618905354587'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1041765618905354587'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/blog-post_20.html' title='フレームワーク・ライブラリの比較'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-2695329457847996963</id><published>2008-10-14T13:34:00.005+09:00</published><updated>2008-10-14T14:05:36.884+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><title type='text'>$scripts_for_layoutは$html-&gt;css(),$javascript-&gt;link()でビューからヘッダに追加する変数</title><content type='html'>&lt;p&gt;1.2で「default.ctp」に追加された&lt;code&gt;$scripts_for_layout&lt;/code&gt;は、ビューからヘッダ要素を追加したい時に使える。&lt;br /&gt;
特定のビューでだけ使うスクリプトとか使いするのに便利。ビューごとにタイトルを変化させるとか、メタ情報も追加できるのでSEO的に大事。&lt;br /&gt;
次のように&lt;/p&gt;
&lt;pre&gt;&lt;code title="覚書: scripts_for_layout"&gt;  &amp;lt;?php echo $html-&amp;gt;css('common',NULL,NULL,false); ?&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;と書くとヘッダの&lt;code&gt;$scripts_for_layout&lt;/code&gt;が置き換わる。「cake/app/webroot/css」がカレント。(直接&amp;lt;link&amp;gt;とかで記述するなら「/cake/css/」で良い)&lt;/p&gt;
&lt;pre&gt;&lt;code title="覚書: scripts_for_layout"&gt;  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;/css/common.css&amp;quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
最後の引数&lt;code&gt;false&lt;/code&gt;が指定されることでヘッダに追加される。&lt;code&gt;true&lt;/code&gt;だったり省略されるとinline、&lt;code&gt;$html-&amp;gt;css()&lt;/code&gt;が記述された場所に追加される。
&lt;/p&gt;
&lt;pre&gt;&lt;code title="&amp;quot;scripts_for_layoutとは？&amp;quot; フォーラム - CakePHP Users in Japan"&gt;
  &amp;lt;?php
    $html-&amp;gt;css('hoge', null, array(), false);
    $javascript-&amp;gt;link('hoge', false);
    $javascript-&amp;gt;codeBlock('alert(&amp;quot;foo&amp;quot;)', array('inline' =&amp;gt; false));
  ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;&lt;code title="&amp;quot;scripts_for_layoutとは？&amp;quot; フォーラム - CakePHP Users in Japan"&gt;
  &amp;lt;head&amp;gt;
   &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; type=&amp;quot;text/css&amp;quot; href=&amp;quot;/css/hoge.css&amp;quot; /&amp;gt;
   &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/hoge.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;
   &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;
   //&amp;lt;![CDATA[ 
      alert(&amp;quot;foo&amp;quot;)
   //]]&amp;gt;
   &amp;lt;/script&amp;gt;
 &amp;lt;/head&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これらは&lt;code&gt;addScript()&lt;/code&gt;を使って実装されている。&lt;br /&gt;CSSを記述する&lt;code&gt;style()&lt;/code&gt;などもある。&lt;/p&gt;
&lt;h4&gt;参考&lt;/h4&gt;
&lt;p&gt;&lt;cite&gt;The Cookbook :: 1.2 Collection :: マニュアル&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://manual.cakephp.org/ja/view/206/%E6%95%B4%E5%BD%A2%E6%B8%88%E3%81%BF%E8%A6%81%E7%B4%A0%E3%82%92%E6%8C%BF%E5%85%A5%E3%81%99%E3%82%8B" title="The Cookbook :: 1.2 Collection :: マニュアル :: 組み込みのヘルパー :: HTML :: 整形済み要素を挿入する"&gt;7.4.1 整形済み要素を挿入する&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;夜の Discovery&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://d.hatena.ne.jp/kusakari/20080725/1216978488" title="CakePHP1.2 で特定のアクションだけ JS/CSS を読み込んで欲しい - 夜の Discovery"&gt;CakePHP1.2 で特定のアクションだけ JS/CSS を読み込んで欲しい&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;CakePHP Users in Japan&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?post_id=2120&amp;amp;topic_id=1048&amp;amp;forum=7" title="&amp;quot;scripts_for_layoutとは？&amp;quot; フォーラム - CakePHP Users in Japan"&gt;scripts_for_layoutとは？&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;cite&gt;アルファブレンド・プログラミングチップス&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://program.alphabrend.com/modules/pukiwiki/59.html" title="scripts_for_layoutとは？-TIPS/CakePHP/scripts_for_layoutとは？-プログラミングチップス - アルファブレンド・プログラミングチップス"&gt;scripts_for_layoutとは？&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-2695329457847996963?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/2695329457847996963/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=2695329457847996963' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2695329457847996963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2695329457847996963'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/scriptsforlayouthtml-cssjavascript-link.html' title='$scripts_for_layoutは$html-&gt;css(),$javascript-&gt;link()でビューからヘッダに追加する変数'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-2648843867780325544</id><published>2008-10-13T17:40:00.003+09:00</published><updated>2008-10-13T17:48:33.084+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='モデル'/><category scheme='http://www.blogger.com/atom/ns#' term='サンプル'/><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><category scheme='http://www.blogger.com/atom/ns#' term='コントローラ'/><title type='text'>CakePHP1.2での確認画面を挟んだ登録フォーム</title><content type='html'>&lt;p&gt;
&lt;cite&gt;cakephperの日記(cakePHP1.2RC2ベース)&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://d.hatena.ne.jp/cakephper/20080904/1220522529" title="よくある申込み画面の機能を作る - cakephperの日記(cakePHP1.2RC2ベース)"&gt;よくある申込み画面の機能を作る&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;MVCすべてのソースを載せてます。&lt;br /&gt;
アクションの遷移は以下の通り。バリデーションは確認画面の一回だけ。&lt;/p&gt;
&lt;pre&gt;申し込み画面(index)→確認画面（config）→完了画面(complete)&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-2648843867780325544?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/2648843867780325544/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=2648843867780325544' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2648843867780325544'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2648843867780325544'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/cakephp12.html' title='CakePHP1.2での確認画面を挟んだ登録フォーム'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4627421848685892306</id><published>2008-10-13T15:35:00.006+09:00</published><updated>2008-10-13T16:34:07.722+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>CakePHP1.2でset()したデータをビューで扱うにはtagValue()ではなくvalue()</title><content type='html'>&lt;p&gt;ビューにデータを出力する&lt;/p&gt;
&lt;pre title="CakePHPクッキング - 投稿の詳細: tagValueからvalueに変更"&gt;
 // CakePHP1.1
  &lt;code&gt;&amp;lt;?php e(h($html-&amp;gt;tagValue('Sample/name'))); ?&amp;gt;&lt;/code&gt;
 // CakePHP1.2 RC2 
  &lt;code&gt;&amp;lt;?php e(h($html-&amp;gt;value('Sample/name'))); ?&amp;gt;&lt;/code&gt;
&lt;/pre&gt;

&lt;h4&gt;参考&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://cakephp.blog16.jp/index.php/2008/07/08/p33" title="CakePHPクッキング - 投稿の詳細: tagValueからvalueに変更"&gt;tagValueからvalueに変更&lt;/a&gt; - &lt;cite&gt;CakePHPクッキング&lt;/cite&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4627421848685892306?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4627421848685892306/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4627421848685892306' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4627421848685892306'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4627421848685892306'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/cakephp12settagvaluevalue.html' title='CakePHP1.2でset()したデータをビューで扱うにはtagValue()ではなくvalue()'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4944679057868543954</id><published>2008-10-11T15:12:00.002+09:00</published><updated>2008-10-11T15:50:55.628+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>memo</title><content type='html'>&lt;div&gt;
&lt;a href="http://astrodeo.com/blog/archives/159" title="CakePHP1.2のラジオボタン | Astrodeo"&gt;CakePHP1.2のラジオボタン&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/tag/cakephp/page/6" title="CakePHP | Sun Limited Mt. - Part 6"&gt;CakePHP Model::generateList メソッドの {n}&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://ore.saizensen.net/archives/68" title="おれ最前線ねっと - [cakephp]FormHelperから自動出力されるdiv要素を消す方法。"&gt;FormHelperから自動出力されるdiv要素を消す方法。&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://blog.x-ite.jp/archives/80" title="CakePHP 1.2の便利なValidation | エクサイト"&gt;CakePHP 1.2の便利なValidation&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://book.cakephp.org/ja/view/125/%E3%83%87%E3%83%BC%E3%82%BF%E3%81%AE%E3%83%90%E3%83%AA%E3%83%87%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3-Data-Validation" title="The Cookbook :: 1.2 Collection :: マニュアル :: CakePHPによる作業の定石 :: データのバリデーション(Data Validation)"&gt;4.1 データのバリデーション(Data Validation)&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://bakery.cakephp.org/articles/view/multivalidatablebehavior-using-many-validation-rulesets-per-model" title="MultivalidatableBehavior: Using many validation rulesets per model (Articles) | The Bakery, Everything CakePHP"&gt;MultivalidatableBehavior: Using many validation rulesets per model&lt;/a&gt;&lt;br /&gt;
→ヴァリデーションのルールを使い分けるビヘイヴォア。
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4944679057868543954?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4944679057868543954/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4944679057868543954' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4944679057868543954'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4944679057868543954'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/memo.html' title='memo'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-556947533349253084</id><published>2008-10-11T09:57:00.002+09:00</published><updated>2008-10-11T10:31:36.022+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>フォームのラベル</title><content type='html'>&lt;p&gt;CakePHP1.2系のhelperではフォーム要素が&lt;code&gt;&amp;lt;label&amp;gt;&amp;lt;/label&amp;gt;&lt;/code&gt;に囲まれて出力されます。&lt;/p&gt;

&lt;pre&gt;
&lt;code&gt;echo $form-&gt;radio('User/radio', array('1'=&gt;'check'));&lt;/code&gt;
&lt;code title="How to create an input field without a label - cakebaker"&gt;echo $form-&amp;gt;input('Project/name');&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;このフォーム・ヘルパーは次の様なコードになる。&lt;/p&gt;
&lt;pre&gt;
&lt;code title="How to create an input field without a label - cakebaker"&gt;
&amp;lt;div class=&amp;quot;input&amp;quot;&amp;gt; &amp;lt;label for=&amp;quot;ProjectName&amp;quot;&amp;gt;Name&amp;lt;/label&amp;gt; &amp;lt;input name=&amp;quot;data[Project][name]&amp;quot; type=&amp;quot;text&amp;quot; value=&amp;quot;&amp;quot; id=&amp;quot;ProjectName&amp;quot; /&amp;gt; &amp;lt;/div&amp;gt;&lt;/code&gt;
&lt;code&gt;&amp;lt;input name="data[User/radio]" id="User/radio"  value="1" type="radio"&amp;gt;&amp;lt;label for="User/radio"&amp;gt;無&amp;lt;/label&amp;gt;&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;必要ないとき、とくにテキスト・エリア、は「&lt;code&gt;'label' =&amp;gt; false&lt;/code&gt;」を与える。&lt;/p&gt;
&lt;pre&gt;&lt;code title="How to create an input field without a label - cakebaker"&gt;echo $form-&amp;gt;input('Project/name', array('label' =&amp;gt; false));&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;また、デフォルトではテキスト・エリアの前にname属性が表示されるが、自由に指定できる。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;echo $form-&amp;gt;input('Project/name', array('label' =&amp;gt; '名前'));&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;参考&lt;/h4&gt;
&lt;p&gt;&lt;cite&gt;cakebaker&lt;/cite&gt;&lt;br /&gt;
&lt;a href="http://cakebaker.42dh.com/2007/03/01/how-to-create-an-input-field-without-a-label/" title="How to create an input field without a label - cakebaker"&gt;How to create an input field without a label&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-556947533349253084?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/556947533349253084/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=556947533349253084' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/556947533349253084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/556947533349253084'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/blog-post_1718.html' title='フォームのラベル'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5730560926835319145</id><published>2008-10-11T01:20:00.002+09:00</published><updated>2008-10-11T01:32:09.814+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>デフォルトのビュー・レイアウトをカスタマイズ</title><content type='html'>&lt;p&gt;
「cake/cake/libs/view/layouts/default.ctp」を「cake/app/views/layouts/default.ctp」にコピー＆変更。ヘッダとかフッタとかタイトルとかJS・CSSファイルとか。&lt;br /&gt;
「flash.ctp」というファイルも同ディレクトリに存在する。&lt;br /&gt;
。$this-&gt;flashのテンプレートのようなのでカスタマイズやエラーがあったときは同様にコピーして変更・修正。titleタグよりあとにmetaタグでのエンコード指定があると$this-&gt;flashが真っ白になったりすることがある。エンコードの順番はXMLでは他の機会にも起きるので注意。&lt;/p&gt;
&lt;h4&gt;参考&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://pub.studio15.jp/2008/04/18/cakephp-first-step/"&gt;CakePHP1.2をインストールして最初にする作業メモ&lt;/a&gt;&lt;br /&gt;&lt;a href="http://pub.studio15.jp/2008/01/30/cakephp-flash/"&gt;CakePHPの$this-&gt;flashで画面が真っ白になる問題&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5730560926835319145?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5730560926835319145/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5730560926835319145' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5730560926835319145'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5730560926835319145'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/blog-post_11.html' title='デフォルトのビュー・レイアウトをカスタマイズ'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5127364349385599373</id><published>2008-10-11T01:10:00.004+09:00</published><updated>2008-10-14T14:10:52.676+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ビュー'/><title type='text'>ヘッダでインクルードするJSファイルやCSSファイルをアクションごとに変更</title><content type='html'>&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/kusakari/20080725/1216978488"&gt;CakePHP1.2 で特定のアクションだけ JS/CSS を読み込んで欲しい&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
「app/views/layouts/default.ctp」に 「&lt;code&gt;echo $scripts_for_layout;&lt;/code&gt;」を追記。&lt;br /&gt;
「app/views/users/signup.ctp」のように特別に&lt;code&gt;&amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;/code&gt;を変更したいビュー内に作成。
&lt;/p&gt;
&lt;ins datetime="2008-10-14T14:10:00+09:00" cite="http://cakephp-saboten.blogspot.com/2008/10/scriptsforlayouthtml-cssjavascript-link.html" title="2008/10/14 14.10追記"&gt;
&lt;strong&gt;※追記：2008/10/14　14.10&lt;/strong&gt;&lt;br&gt;
&lt;p&gt;&lt;cite&gt;PHP on the Cake!&lt;/cite&gt;:2008年10月14日記事参照&lt;br /&gt;&lt;a href="http://cakephp-saboten.blogspot.com/2008/10/scriptsforlayouthtml-cssjavascript-link.html" title="PHP on the Cake !: $scripts_for_layoutは$html-&amp;gt;css(),$javascript-&amp;gt;link()でビューからヘッダに追加する変数"&gt;$scripts_for_layoutは$html-&amp;gt;css(),$javascript-&amp;gt;link()でビューからヘッダに追加する変数&lt;/a&gt;&lt;/p&gt;
&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5127364349385599373?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5127364349385599373/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5127364349385599373' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5127364349385599373'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5127364349385599373'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/jscss.html' title='ヘッダでインクルードするJSファイルやCSSファイルをアクションごとに変更'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-332310757936240176</id><published>2008-10-10T16:44:00.004+09:00</published><updated>2008-10-29T00:01:59.864+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='データベース'/><title type='text'>SQLite3を使う(※追記)</title><content type='html'>&lt;p&gt;&lt;a href="http://www.cpa-lab.com/tech/085" title="CakePHP1.2をSQLite3で動かしてみた。＆ダウンロード - CPA-LABテクニカル"&gt;CakePHP1.2をSQLite3で動かしてみた。＆ダウンロード&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
邪道です。&lt;strong&gt;PHP5でしかできない&lt;/strong&gt;ので、せっかくのPHP4,5対応であるCakePHPの長所を消してしまいます。&lt;br /&gt;
&lt;q cite="http://www.cpa-lab.com/tech/085"&gt;SQLite3にCakePHPが正式対応しない理由かもね&lt;/q&gt;
&lt;/p&gt;
&lt;div&gt;
&lt;h4&gt;ダウンロード&lt;/h4&gt;
&lt;a href="http://www.cpa-lab.com/tech/085#p0.4" title="CakePHP1.2をSQLite3で動かしてみた。＆ダウンロード - CPA-LABテクニカル"&gt;ダウンロード&lt;/a&gt;LastUpdate:SQLite3_spok1.0.7beta.ZIP(2008/10/10現在)
&lt;/div&gt;
&lt;div&gt;
&lt;h4&gt;インストール&lt;/h4&gt;
&lt;p&gt;解凍して出来た２つのファイルのうち、「dbo_source.php」は「cake/app/models/datasources/」にアップロード&lt;br /&gt;「dbo_sqlite3_spok.php」を「cake/app/models/datasources/」に「dbo/」ディレクトリを作成しアップロード。
&lt;/p&gt;
&lt;pre&gt;
SQLite3_spok1.0.7beta.ZIP
∟「dbo_sqlite3_spok.php」→「cake/app/models/datasources/dbo/」
∟「dbo_source.php」→「cake/app/models/datasources/」
&lt;/pre&gt;
&lt;/div&gt;
&lt;ins datetime="2008-10-28T23:55:00+09:00"  title="2008/10/28 23:55追記" style="color:#c00;"&gt;
&lt;strong&gt;※追記：2008/10/28 23:55&lt;/strong&gt;&lt;br /&gt;
&lt;p&gt;このファイルに上書きされる為か、後からDB接続をMySQLにしたらエラーが出た。&lt;br /&gt;
「/public_html/cake/cake/libs/model/datasources/dbo/dbo_mysql.php」の「&lt;code&gt;hasResult()&lt;/code&gt;」が見つからないとかナントカ。&lt;br /&gt;
二つのファイルを削除したら接続できるようになった。&lt;/p&gt;
&lt;/ins&gt;
&lt;div&gt;
&lt;h4&gt;DB接続の設定ファイル&lt;/h4&gt;
&lt;pre&gt;/* config/database.php */
&lt;code title="CakePHP1.2をSQLite3で動かしてみた。＆ダウンロード - CPA-LABテクニカル"&gt;
var $default = array(
        'driver' =&amp;gt; 'sqlite3_spok',
        'connect' =&amp;gt; 'PDO',
        'host' =&amp;gt; '',
        'port' =&amp;gt; '',
        'login' =&amp;gt; '',
        'password' =&amp;gt; '',
        'database' =&amp;gt; &amp;quot;sqlite:/home/hoge/hogehoge/filename.sqlite3&amp;quot;,
        'schema' =&amp;gt; '',
        'prefix' =&amp;gt; '',
        'encoding' =&amp;gt; ''
      );
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
「&lt;code&gt;'database'&lt;/code&gt;」を「&lt;code&gt;sqlite2:&lt;/code&gt;」とすると、SQLite2にも接続できる。ファイル名は何でも良く、拡張子も何でも良いし無くても良い。
「cake/app/webroot/」がカレントになる模様。個人的には「cake/app/db/」を作って権限与えて「&lt;code&gt;'database' =&amp;gt; &amp;quot;sqlite:../db/data.sqlite3&amp;quot;&lt;/code&gt;」。ファイル名はモデル名にした方が管理しやすいかな。&lt;/p&gt;
&lt;/div&gt;
&lt;p&gt;
SQLite3はちょっと違うようなので注意。
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.cpa-lab.com/tech/083" title="CakePHPでSQLite3を使う（覚書編） - CPA-LABテクニカル"&gt;CakePHPでSQLite3を使う（覚書編）&lt;/a&gt;&lt;/p&gt;
&lt;ins datetime="2008-10-13T14:40:00+09:00" cite="http://saboten009.blogspot.com/2008/10/sqlitegui-sqlite-manager.html" title="2008/10/13 14.40追記"&gt;
&lt;strong&gt;※追記：2008/10/13　14:40&lt;/strong&gt;&lt;br /&gt;
&lt;a href="http://saboten009.blogspot.com/2008/10/sqlitegui-sqlite-manager.html#links" title="さぼてん: 【SQLite】GUIで管理 SQLite Manager"&gt;GUIで管理 SQLite Manager&lt;/a&gt; - &lt;cite&gt;さぼてん&lt;/cite&gt;
&lt;/ins&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-332310757936240176?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/332310757936240176/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=332310757936240176' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/332310757936240176'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/332310757936240176'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/sqlite3.html' title='SQLite3を使う(※追記)'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-7612481868788480068</id><published>2008-10-10T09:42:00.002+09:00</published><updated>2008-10-10T10:17:28.406+09:00</updated><title type='text'>フォームからの入力</title><content type='html'>&lt;p&gt;コントローラでのフォームからのPOSTデータ&lt;/p&gt;
&lt;pre&gt;  &lt;code&gt;$this-&gt;params&lt;/code&gt;
  &lt;code&gt;$this-&gt;params['data']&lt;/code&gt;
  //&lt;code&gt;$this-&gt;data&lt;/code&gt;と同一&lt;/pre&gt;
&lt;p&gt;変数を表示させるには&lt;code&gt;pr()&lt;/code&gt;を使う。コントローラからもビューからも使えてデバックに便利。&lt;/p&gt;
&lt;pre&gt;  &lt;code&gt;pr($this-&gt;params)&lt;/code&gt;
  &lt;code&gt;pr($session)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;print_r()&lt;/code&gt;で出力して&lt;code&gt;&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&lt;/code&gt;で囲んでいる模様。&lt;/p&gt;
&lt;h4&gt;&lt;code&gt;pr()&lt;/code&gt;をカスタマイズ&lt;/h4&gt;
&lt;p&gt;&lt;code&gt;pr()&lt;/code&gt;は「/cake/basics.php」定義されている。&lt;br /&gt;デバッグ用に次のように使う場合&lt;/p&gt;
&lt;pre&gt;&lt;code title="CakePHP の開発を簡単にする 5 つの Tips | Sun Limited Mt."&gt;  pr($var);
  die;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;関数にしてしまえば便利。&lt;/p&gt;
&lt;pre&gt;&lt;code title="CakePHP の開発を簡単にする 5 つの Tips | Sun Limited Mt."&gt;  function prd($var) {
    pr($var);
    die;
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;更に次のように変更すれば&lt;code&gt;pr()&lt;/code&gt;が記述されてる行も表示する。&lt;/p&gt;
&lt;pre&gt;&lt;code title="ひでぶろぐ CAKEPHPpr()関数で行数表示。便利。"&gt;  &amp;lt;?  function pr($var) {
    if (Configure::read() &amp;gt; 0) {
      $array = debug_backtrace();
      echo($array[0]['file'].&amp;quot; (line &amp;quot;.$array[0]['line'].&amp;quot;)&amp;quot;);
      echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;
      print_r($var);
      echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;
    }
  }&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;code&gt;debug_backtrace()&lt;/code&gt;で取得してる模様。&lt;br /&gt;
二つあわせて定義。&lt;/p&gt;
&lt;pre&gt;&lt;code title="pr()関数カスタマイズ - 行番号表示デバック関数prd()"&gt;  &amp;lt;?  function prd($var) {
    if (Configure::read() &amp;gt; 0) {
      $array = debug_backtrace();
      echo($array[0]['file'].&amp;quot; (line &amp;quot;.$array[0]['line'].&amp;quot;)&amp;quot;);
      echo &amp;quot;&amp;lt;pre&amp;gt;&amp;quot;;
      print_r($var);
      echo &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;;
      die;
    }
  }&lt;/code&gt;&lt;/pre&gt;
&lt;h4&gt;参考&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.hideblog.net/nikkis/show/75" title="ひでぶろぐ CAKEPHPpr()関数で行数表示。便利。"&gt;pr()関数で行数表示。便利。&lt;/a&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/419#more-419" title="CakePHP の開発を簡単にする 5 つの Tips | Sun Limited Mt."&gt;CakePHP の開発を簡単にする 5 つの Tips&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&amp;amp;order=ASC&amp;amp;topic_id=1213&amp;amp;forum=6&amp;amp;move=prev&amp;amp;topic_time=1213079054" title="&amp;quot;１５のCakePHP Tips&amp;quot; フォーラム - CakePHP Users in Japan"&gt;１５のCakePHP Tips&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-7612481868788480068?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/7612481868788480068/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=7612481868788480068' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7612481868788480068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7612481868788480068'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/blog-post_10.html' title='フォームからの入力'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-6483496603144741812</id><published>2008-10-10T00:05:00.002+09:00</published><updated>2008-10-10T00:23:13.555+09:00</updated><title type='text'>APIを使う</title><content type='html'>&lt;p&gt;&lt;a href="http://shizuoka.kayac.com/2008/01/cakephpgeocoding.html"&gt;CakePHPでGeocoding&lt;/a&gt;&lt;br /&gt;
&lt;q&gt;yahoo mapsやgoogle mapsで提供されているGeocoding APIを使って、世界の都市名と緯度・経度情報をマッピングした静的なテーブルを作成&lt;/q&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bakery.cakephp.org/articles/view/google-geocoder"&gt;Google Geocoder&lt;/a&gt;&lt;br /&gt;
Google Geocoderを利用するコンポーネント&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bakery.cakephp.org/articles/view/adding-a-google-map-to-your-app"&gt;Adding a Google Map to your App&lt;/a&gt;&lt;br /&gt;
GoogleMapHelper チュートリアル風。
∟&lt;a href="http://d.hatena.ne.jp/kou32rr/20080920/1221911446"&gt;GoogleMAP+cakePHPにチャレンジ&lt;/a&gt;&lt;br /&gt;
1.2系対応。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://bakery.cakephp.org/articles/view/webservice-behavior"&gt;Webservice Behavior&lt;/a&gt;&lt;br /&gt;
Webサービスを利用するビヘイビア。&lt;br /&gt;
∟&lt;a href="http://fdays.blogspot.com/2008/09/webapi-behavior-bakery-webservice.html"&gt;CakePHP 1.2で WebService APIを利用する&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://d.hatena.ne.jp/charly24/20070521/1179732675"&gt;CakePHP1.2のBehaviorを使う&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://book.cakephp.org/ja/view/88/%E3%83%93%E3%83%98%E3%82%A4%E3%83%93%E3%82%A2"&gt;3.8 ビヘイビア&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-6483496603144741812?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/6483496603144741812/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=6483496603144741812' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6483496603144741812'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6483496603144741812'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/api.html' title='APIを使う'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4579971769761490984</id><published>2008-10-08T18:08:00.003+09:00</published><updated>2008-10-08T18:31:31.191+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='公開する'/><title type='text'>アプリ公開時のエラー処理</title><content type='html'>&lt;p&gt;&lt;a href="http://www.a24loveweb.net/cake/%E9%81%8B%E7%94%A8%E6%99%82%E3%81%ABphp%E3%81%AE%E3%82%A8%E3%83%A9%E3%83%BC%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95/" title="運用時にPHPのエラーを確認する方法 | CakePHP入門"&gt;運用時にPHPのエラーを確認する方法&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;システムの公開時にはPHPのエラーが画面に表示されないようにする。&lt;/p&gt;
&lt;pre&gt;/* app/config/core.php */
&lt;code title="運用時にPHPのエラーを確認する方法 | CakePHP入門"&gt;
 define('DEBUG', 0);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;デバッグできるようにログファイルに書き出すようにする。(ログファイルには書き込み権限を与える)&lt;/p&gt;
&lt;pre&gt;/* app/webroot/index.php */
&lt;code title="運用時にPHPのエラーを確認する方法 | CakePHP入門"&gt;
 require CORE_PATH . 'cake' . DS . 'bootstrap.php'; error_reporting(E_ALL); //追加
 ini_set(&amp;quot;display_errors&amp;quot;, 0); //追加
 ini_set(&amp;quot;log_errors&amp;quot;, 1); //追加
 ini_set(&amp;quot;error_log&amp;quot;, &amp;quot;/path/to/phperror.log&amp;quot;); //追加
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;自分の環境では以下を参考。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://asaton.seesaa.net/article/37088871.html" title="Webプログラミングに関するメモ: CakePHPの本番稼動のerror_reportingについて"&gt;CakePHPの本番稼動のerror_reportingについて&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;「.htaccess」ファイルにエラー出力の制御を記述。エラーログも書き出す。&lt;/p&gt;
&lt;pre&gt;/* app/webroot/.htaccess */
&lt;code title="Webプログラミングに関するメモ: CakePHPの本番稼動のerror_reportingについて"&gt;
  php_flag display_errors off
  php_flag log_errors on
  php_value error_log &amp;quot;./logs/php_error.log&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;そして画面にエラーが表示されないようにする。&lt;/p&gt;
&lt;pre&gt;/* app/config/core.php - 52行目～ */
&lt;code title="Webプログラミングに関するメモ: CakePHPの本番稼動のerror_reportingについて"&gt;
  define('DEBUG', 0); // 0はプロダクションモード
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ところが上手くいかない。原因は以下が利いているから。&lt;/p&gt;
&lt;pre&gt;/* cake/libs/configure.php -&gt; Configure::write */
&lt;code title="Webプログラミングに関するメモ: CakePHPの本番稼動のerror_reportingについて"&gt;
  error_reporting(0)
&lt;/code&gt;&lt;/pre&gt;
&lt;strong&gt;対策その１～CakePHPの設定を変更&lt;/strong&gt;
&lt;p&gt;上のコードを変更する。&lt;/p&gt;
&lt;pre&gt;/* cake/libs/configure.php -&gt; Configure::write */
&lt;code&gt;
  error_reporting(E_ALL);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;欠点:コア部分を変更してしまう&lt;/p&gt;
&lt;strong&gt;対策その２～プロジェクト内の設定を変更&lt;/strong&gt;
&lt;p&gt;そのプロジェクトではエラー出力するように追記する。&lt;/p&gt;
&lt;pre&gt;/* app/webroot/index.php - 78行目～ */
&lt;code title="Webプログラミングに関するメモ: CakePHPの本番稼動のerror_reportingについて"&gt;
require CORE_PATH . 'cake' . DS . 'bootstrap.php';
error_reporting(E_ALL);
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;欠点:すべてのエラーがフォローしきれない&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4579971769761490984?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4579971769761490984/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4579971769761490984' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4579971769761490984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4579971769761490984'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/10/blog-post.html' title='アプリ公開時のエラー処理'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-7378960196901022386</id><published>2008-04-10T13:00:00.005+09:00</published><updated>2008-04-10T14:23:31.589+09:00</updated><title type='text'>フォームのリロードと遷移</title><content type='html'>&lt;p&gt;
一般的な登録フォームの画面遷移は次の様に考えられる。
&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;入力画面→入力確認画面→完了画面&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;
「完了画面」で登録や送信の処理が実行されるので、この画面で再読み込み(リロード)をされると同じ処理を繰り返すことになる(メールが2通送られたり)。&lt;br /&gt;
これを防ぐ手段としては&lt;strong&gt;チケットやトークンというものを発行して、処理が完了したら破棄させて再処理させない&lt;/strong&gt;ようにするのがおそらく一般的(要するに未処理・未送信を表すフラグを使う)。
&lt;/p&gt;
&lt;p&gt;&lt;a href="http://itpro.nikkeibp.co.jp/article/COLUMN/20070910/281585/" title="【PHP TIPS】 58. すごいリロード対策：ITpro"&gt;【PHP TIPS】 58. すごいリロード対策&lt;/a&gt; - &lt;cite&gt;ITpro&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;
リンク先では、「確認画面」で&lt;strong&gt;乱数のチケットを発行しセッションに保存&lt;/strong&gt;、「完了画面」で確認することでリロード対策と&lt;strong&gt;CSRF(クロスサイトリクエストフォージェリ)対策&lt;/strong&gt;が同時に出来る。&lt;/p&gt;
&lt;p&gt;※CSRF(クロスサイトリクエストフォージェリ)について&lt;br /&gt;
&lt;a href="http://www.jumperz.net/texts/csrf.htm" title="開発者のための正しいCSRF対策"&gt;開発者のための正しいCSRF対策&lt;/a&gt;&lt;br /&gt;
&lt;a href="http://takagi-hiromitsu.jp/diary/20050427.html" title="高木浩光＠自宅の日記 - クロスサイトリクエストフォージェリ（CSRF）の正しい対策方法"&gt;クロスサイトリクエストフォージェリ（CSRF）の正しい対策方法&lt;/a&gt; - &lt;cite&gt;高木浩光＠自宅の日記&lt;/cite&gt;&lt;/p&gt;
&lt;p&gt;
ただ、ウィンドウを2つ開いて登録処理をするともう一つも処理できなくなるという問題がある。&lt;br /&gt;
あまり有り得ないケースな気もするがブログみたいなシステムだと考えられるか。&lt;br /&gt;
改良されたソースが以下のリンク先に公開されている。&lt;br /&gt;
対策方法は発行したチケットをすべて記憶させる。
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://d.hatena.ne.jp/p4life/20071021/1192960112" title="すごいリロード対策 - p4lifeのメモ"&gt;すごいリロード対策&lt;/a&gt; - &lt;cite&gt;p4lifeのメモ&lt;/cite&gt;
&lt;/p&gt;
&lt;p&gt;
個人的には以下のサイトの考え方が自然に思える。
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://blog.webcreativepark.net/2007/10/22-011631.html" title="ふつうのリロード対策[to-R]"&gt;ふつうのリロード対策&lt;/a&gt; - &lt;cite&gt;to-R&lt;/cite&gt;
&lt;/p&gt;
&lt;p&gt;登録フォームの画面遷移ではなく、以下のような実際のプログラム処理の遷移で考える。&lt;/p&gt;
&lt;pre&gt;&lt;strong&gt;入力画面表示処理→入力確認画面表示処理→登録(メール送信)処理→完了画面表示処理&lt;/strong&gt;&lt;/pre&gt;
&lt;p&gt;
これによって「完了画面」をリロードしても「登録処理」が繰り返されることは無い。
&lt;/p&gt;
&lt;blockquote cite="http://blog.webcreativepark.net/2007/10/22-011631.html" title="ふつうのリロード対策[to-R]"&gt;
CSRF対策はベストと思われる対策が存在しないので、個人的にはよほどスパムが多い場合か、神経質に処理しないといけない場合でないと実装しないです。(スパム対策の場合は英字フィルタリングなどで対応するのがほとんどですが)
&lt;/blockquote&gt;
&lt;p&gt;
現実的ですが納得しない人もいるでしょう。
&lt;/p&gt;
&lt;p&gt;
間違いやもっと良い方法をご指摘いただければ幸いです。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
class OrdersController extends AppController
{
  var $name = 'Orders';
  function index(){
    if (empty($this-&amp;gt;data)) {
      $this-&amp;gt;index();
    } else {
      // 入力確認
      if (@$_POST['conf']) {
        if (!$this-&amp;gt;Order-&gt;validates($this-&amp;gt;params['data'])) {
          //入力値が不正
          $this-&amp;gt;render("index");
        } else {
          //確認画面表示
          $this-&amp;gt;render('conf');
        }
      } else if (@$_POST['send']) {
        //メール送信処理
        $this-&amp;gt;_mail();
      }
    }
  }
  //送信処理   -外部からアクセスできない _mail() 関数
  function _mail() {

    /*   メールの作成   */

    //メール送信
    if ($mail-&amp;gt;send()) {
        //送信完了
        $this-&amp;gt;flash('','/orders/send');
     } else {
        //送信失敗
        $this-&amp;gt;flash('Error','/orders/index');
     }
  }
  //送信完了
  function send() {
    $this-&amp;gt;render('send');
  }
}
&lt;/code&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-7378960196901022386?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/7378960196901022386/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=7378960196901022386' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7378960196901022386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7378960196901022386'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/04/blog-post.html' title='フォームのリロードと遷移'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5039587170069334104</id><published>2008-03-31T00:06:00.003+09:00</published><updated>2008-03-31T01:18:24.703+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='モデル'/><category scheme='http://www.blogger.com/atom/ns#' term='関数'/><title type='text'>モデルの関数</title><content type='html'>&lt;p&gt;
PHP において、モデル(models)は AppModel クラスを拡張(extend)したクラスです。&lt;br /&gt;
AppModel クラスは、「cake/」ディレクトリで定義されています。&lt;br /&gt;
自分でカスタマイズするには「app/app_model.php」ファイルを作成して、全モデルで共有するメソッドを定義します。&lt;br /&gt;
このクラスは「cake/libs/model/model.php」の中で定義されている、スタンダード Cake ライブラリの一つであるモデル(Model)クラスを拡張したものです。
&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;findAll($conditions, $fields, $order, $limit, $page, $recursive);&lt;/code&gt; 
指定されたフィールドから $conditions にマッチするものを $page (デフォルトは１ページ目)ページから $limit レコードまで返します。
$recursive オプションが１より大きい値に設定されている場合、findAll() オペレーションは、 findAll() で見つかった関連モデルに関しても結果を返します。
&lt;code&gt;find($conditions, $conditions, $fields, $order, $recursive);&lt;/code&gt;
$conditions にマッチする最初のレコードから、指定されたフィールド(指定がなければ全フィールド)を返します。
$recursive オプションが１から３の間に設定されていると、find() オペレーションは、find() で見つかったモデルに関連しているモデルも返します。

&lt;code&gt;findAllBy[FieldName]($value);&lt;/code&gt;
FieldName に指定した特定のフィールドを検索し、&lt;code&gt;$value&lt;/code&gt; 値に一致するものを取得します。(例：&lt;code&gt;$this-&amp;gt;Post-&amp;gt;findByTitle('My First Blog Post')&lt;/code&gt;、&lt;code&gt;$this-&amp;gt;User-&amp;gt;findByName('Author')&lt;/code&gt; など）
&lt;code&gt;findNeighbours($conditions, $conditions, $field, $value);&lt;/code&gt;
&lt;code&gt;$field&lt;/code&gt; と &lt;code&gt;$value&lt;/code&gt; で指定したフィールドから &lt;code&gt;$conditions&lt;/code&gt; の SQL 条件にマッチするレコードに隣接するデータを返します。
これはモデルのエントリを特定の順番でたどれるように、「前」「次」リンクを準備する時に便利です。この関数は数値または日付のフィールドの場合のみ動きます。
&lt;code&gt;field($name, $conditions, $order);&lt;/code&gt;
&lt;code&gt;$conditions&lt;/code&gt; の条件にマッチし、&lt;code&gt;$order&lt;/code&gt; で指定された順番で当てはまった一つのフィールドの最初の内容を文字列として返します。
&lt;code&gt;findCount($conditions);&lt;/code&gt;
条件にマッチするレコード数を返します。
&lt;code&gt;generateList($conditions, $conditions, $order, $limit, $keyPath, $valuePath);&lt;/code&gt;
$keyPath と $valuePath で、key value のペアになったリストを取り出せます。
モデルの一覧から select タグを作る時などに便利です。(select タグの value、ラベルをこの関数で取得した value、key に対応させる)
&lt;code&gt;read($fields, $id);&lt;/code&gt;
現在読み込んでいるレコード、または $id で指定したレコードから、フィールドと値をと取得します。
&lt;code&gt;query($query);&lt;/code&gt;
&lt;code&gt;execute($query);&lt;/code&gt;
SQL クエリを渡します。
query() は結果レコードが返される(カスタム SQL クエリ)のに対して、execute() は返り値はない(カスタム SQL のコマンド)という違いがあります。
&lt;/pre&gt;
&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://www.cakephp.jp/doc/ch06s02.html" title="6.2. モデルの関数"&gt;6.2. モデルの関数&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5039587170069334104?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5039587170069334104/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5039587170069334104' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5039587170069334104'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5039587170069334104'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_31.html' title='モデルの関数'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5133419903882492935</id><published>2008-03-30T17:05:00.003+09:00</published><updated>2008-03-30T19:58:09.655+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='モデル'/><title type='text'>モデルについて</title><content type='html'>MVC パターンの M にあたる部分、モデル（model）の役割は、&lt;q cite="http://www.cakephp.jp/doc/models.html#id4800437"&gt;ドメインロジックを、表示部分から切り離し、アプリケーションのロジックだけを分離&lt;/q&gt;することです。

モデルが一般的に示すものはデータベース、さらに具体的には特定のテーブルです。
それぞれのモデルは、モデル名を複数形にした名前のテーブルに対応します。
例えば「User」モデルは「users」 テーブルを使用します。
モデルにはさらに、データバリデーション(データの値の検証)、アソシエーション(テーブル同士の関連：リレーション)情報、テーブル特有のメソッドなどを含めます。
下記は、シンプルな User モデルが Cake の中にあったらどうなるかというサンプルです
&lt;pre&gt;
User モデルの例:「/app/models/user.php」に保存
&lt;code&gt;
//AppModel は、Cake のモデルの機能をすべて提供しています
class User extends AppModel
{
 
    var $name = 'User';
    // これはバリデーションに用いられます
    var $validate = array();

    // アソシエーション（関連）を定義することもできます
    var $hasMany = array('Image' =&gt;
                   array('className' =&gt; 'Image')
                   );

    // 独自の関数を含めることもできます：
    function makeInactive($uid)
    {
        //独自のロジック
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
&lt;a href="http://www.sooey.com/journal/2008/03/26/717/" title="CakePHPを使ったMVC設計のベストプラクティス - Sooey"&gt;CakePHPを使ったMVC設計のベストプラクティス&lt;/a&gt; - &lt;cite&gt;Sooey&lt;/cite&gt;&lt;br /&gt;
CakePHP開発メンバーによるMVCデザインの記事の翻訳。&lt;br /&gt;
原文：&lt;a href="http://c7y.phparch.com/c/entry/1/art,mvc_and_cake" title="php|architect's C7Y, The PHP Community Website"&gt;Best Practices in MVC Design with CakePHP&lt;/a&gt; - &lt;cite&gt; (php|architect’s C7Y)&lt;/cite&gt;
&lt;/p&gt;
&lt;blockquote cite="http://www.sooey.com/journal/2008/03/26/717/"&gt;
&lt;p&gt;
&lt;strong&gt;モデルは単なるデータ保存場所ではなくて、アプリケーションのドメインエンティティなのだ&lt;/strong&gt;。&lt;br /&gt;
テーブルとのやりとりにモデルの機能はとても重宝するが、モデルをそのためだけに使っているのであれば、あなたは損をしていることになる。&lt;br /&gt;
ちゃんとした&lt;strong&gt;MVCではモデルこそが第一級の存在であり&lt;/strong&gt;、そのように扱われる。&lt;br /&gt;
&lt;strong&gt;コントローラはデータをモデルから取得してビューへと送り出すだけのシンプルな糊として振るまい&lt;/strong&gt;、アプリケーション内で最も魅力のない部分となる。
&lt;/p&gt;
&lt;p&gt;
ロジックをどこに配置すべきか決断するときに使える便利な経験則: &lt;br /&gt;
モデルに置けるあらゆるものは、そうすべきである(少なくとも「モデルかコントローラか」といった場合には。やり過ぎてビューロジックをモデルに置いた人を見たこともあるが…)。&lt;br /&gt;
アプリケーションの核となるビジネスロジックと連携しないものは(セッション管理、リクエスト・レスポンス処理、セキュリティやアクセス制限に関するもの)、コントローラに置いたままにすべきである。&lt;br /&gt;
それ以外のあらゆるものはモデルに放り込め。
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://www.cakephp.jp/doc/models.html#id4800437" title="６章　モデル"&gt;6.1. モデルとは&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://cakephp-saboten.blogspot.com/2008/03/blog-post_21.html" title="PHP on the Cake !: 命名規則"&gt;命名規則&lt;/a&gt; - &lt;cite&gt;PHP on the Cake !&lt;/cite&gt; 
&lt;/p&gt; 
&lt;p&gt;
&lt;a href="http://cakephp-saboten.blogspot.com/2008/03/cakephp_21.html" title="PHP on the Cake !: アソシエーション - CakePHP で リレーショナル・データベース"&gt;アソシエーション - CakePHP で リレーショナル・データベース&lt;/a&gt; - &lt;cite&gt;PHP on the Cake !&lt;/cite&gt; 
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5133419903882492935?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5133419903882492935/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5133419903882492935' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5133419903882492935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5133419903882492935'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_30.html' title='モデルについて'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-6408210544553166481</id><published>2008-03-27T22:04:00.003+09:00</published><updated>2008-03-30T16:57:35.099+09:00</updated><title type='text'>Scaffolding の利用</title><content type='html'>&lt;p&gt;
「Scaffolding」は「足場・処刑台」という意味を持ちます。&lt;br /&gt;
CakePHP の Scaffolding の機能はデータベースとモデルを作成するだけで、そこから&lt;q cite="http://www.cakephp.jp/doc/scaffolding.html"&gt;データベースのテーブルを分析し、スタンダードな一覧リストと、追加、削除、編集ボタン、編集用のフォーム、データベースの一つのアイテムを表示するためのスタンダードなビューなどを作り出します。&lt;/q&gt;&lt;br /&gt;
 Scaffolding はかなりの作業を肩代わりしてくれる、WEBアプリケーションの開発初期の時点での優れた方法ですが、簡易的なものなのでロジックやビューをカスタマイズする場合は scaffolding をやめて独自のコードを書くべき時です。&lt;br /&gt;
システムの開発では、初期設計からたびたび変更されることがあります。これは設計プロセスの初期の段階として完全に正常なことですが、変更される度にフォーム等を作らなくてはなりません。scaffolding は、開発者のこの負担を減らすために Cake に含まれています。&lt;/p&gt;
&lt;p&gt;
アプリケーションで scaffolding を利用するには、コントローラの中で $scaffold 変数を宣言するだけです。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
class CategoriesController extends AppController
{
    var $scaffold;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
Scaffold では「～_id」で終わるフィールド名は、別のテーブルの外部キーだと判断します。
例えば「category_id」というフィールドがあった場合、それは「category」というテーブルの外部キーとなります。&lt;br /&gt;
そして外部キーが、アソシエーションによって、モデルに適切に関連付けられている場合、外部テーブルの値が、ビューの中にセレクトボックスで自動的に表示されます。
外部テーブルから表示するフィールドは、外部モデルの $displayField 変数で設定します。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
class Title extends AppModel
{
    var $name = 'Title';
    var $displayField = 'title';
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
この例では、外部テーブルの「title」フィールドを取得します。
&lt;/p&gt;
&lt;p&gt;
scaffolded のビューを、自分で独自に準備することでカスタマイズできます。
あくまでプロトタイプの作成を繰り返す時、このカスタマイズは非常に便利です。
利用するにはビューファイルを次のように配置してください。
&lt;/p&gt;
&lt;pre&gt;
PostsController 用のカスタム  Scaffolding ビューの配置
/app/views/posts/scaffold/index.scaffold.thtml
/app/views/posts/scaffold/show.scaffold.thtml
/app/views/posts/scaffold/edit.scaffold.thtml
/app/views/posts/scaffold/new.scaffold.thtml

すべてのコントローラ用のカスタム scaffolding ビューの配置
/app/views/scaffold/index.scaffold.thtml
/app/views/scaffold/show.scaffold.thtml
/app/views/scaffold/edit.scaffold.thtml
/app/views/scaffold/new.scaffold.thtml
&lt;/pre&gt;


&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://cakephp-saboten.blogspot.com/2008/03/cakephp_21.html" title="PHP on the Cake！: アソシエーション - CakePHP で リレーショナル・データベース"&gt;アソシエーション - CakePHP で リレーショナル・データベース&lt;/a&gt; - &lt;cite&gt;PHP on the Cake！&lt;/cite&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.cakephp.jp/doc/scaffolding.html" title="5.1. Cake の Scaffolding はかなりクール"&gt;5.1. Cake の Scaffolding はかなりクール&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-6408210544553166481?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/6408210544553166481/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=6408210544553166481' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6408210544553166481'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6408210544553166481'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/scaffolding.html' title='Scaffolding の利用'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5448999204576707140</id><published>2008-03-26T22:52:00.002+09:00</published><updated>2008-03-27T01:07:51.724+09:00</updated><title type='text'>高度な Routing 設定</title><content type='html'>&lt;p&gt;システムの開発とそのユーザにとって分かりやすい URL を作るために役立つ設定を「/app/config/core.php」ですることが出来ます。&lt;/p&gt;
&lt;h4&gt;admin routing &lt;/h4&gt;
&lt;p&gt;
コントローラに管理者用の特別なアクションがある場合、特別な URL を準備して権限を持つ人だけがアクセスできるようにできます。
例として、ProductsController と NewsController がある場合、 通常の「/products/add 」や「/news/post 」などというアクション以外に、管理者のみがアクセスできる「/admin/products/add」や「/admin/news/post」というアクションを用意できます。
&lt;/p&gt;
&lt;p&gt;
設定方法は次の通りです。
「/app/config/core.php」ファイルにある「CAKE_ADMIN」を宣言する行のコメントを外します。 「CAKE_ADMIN」のデフォルト値は「admin」になっています。
この場合の管理アクションは「&lt;code&gt;admin_actionName()&lt;/code&gt;」という名前(例えば「&lt;code&gt;admin_add()&lt;/code&gt;」など)になります。
&lt;/p&gt;
&lt;blockquote cite="http://www.cakephp.jp/doc/ch04s04.html" title="4.4. 高度な Routing 設定： Admin Routing と Webservices"&gt;
&lt;p&gt;望ましい URL と CAKE_ADMIN とコントローラアクションの設定の例を幾つか挙げます：&lt;/p&gt;
&lt;pre&gt;
/admin/products/add &lt;code&gt;CAKE_ADMIN = 'admin'&lt;/code&gt;
                             ProductsController のアクション名は = '&lt;code&gt;admin_add()'

/superuser/news/post &lt;code&gt;CAKE_ADMIN = 'superuser'&lt;/code&gt;
                             NewsController のアクション名は = &lt;code&gt;'superuser_post()'&lt;/code&gt;

/admin/posts/delete &lt;code&gt;CAKE_ADMIN = 'admin'&lt;/code&gt;
                             PostsController のアクション名は = &lt;code&gt;'admin_delete()'&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;
admin routes を使うと、ロジックをごちゃごちゃにすることなく、 routing を非常に簡単に実現できます。
&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4&gt;webservices routing&lt;/h4&gt;
&lt;p&gt;
同様に、コントローラ内に URL によって異なる二つのビューを持つ単一のアクションを作ることで簡略化することができます。
&lt;/p&gt;
&lt;p&gt;
「/app/config/core.php」の「&lt;code&gt;WEBSERVICES&lt;/code&gt;」を「&lt;code&gt;'on'&lt;/code&gt;」にすることでルート「admin routing」と同様に利用可能になります。
幾つかのセットは既に定義済みです。(rssx、mlrest、soap、xmlrpc)
&lt;/p&gt;
&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://www.cakephp.jp/doc/ch04s04.html" title="4.4. 高度な Routing 設定： Admin Routing と Webservices"&gt;4.4. 高度な Routing 設定： Admin Routing と Webservices&lt;/a&gt; - &lt;cite&gt;&lt;/cite&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5448999204576707140?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5448999204576707140/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5448999204576707140' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5448999204576707140'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5448999204576707140'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/routing.html' title='高度な Routing 設定'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4544060913257605762</id><published>2008-03-25T23:36:00.006+09:00</published><updated>2008-03-26T00:51:51.042+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='セッション'/><title type='text'>グローバル設定</title><content type='html'>&lt;p&gt;
CakePHP のグローバル設定は「app/config/core.php」に記述されており、このファイルを編集する
ことで変更できます。
&lt;/p&gt;
&lt;pre&gt;
&lt;p&gt;&lt;strong&gt;DEBUG&lt;/strong&gt; : デバッグ情報の出力設定を指定
０(公開モード) : エラー情報を表示しない
&lt;span&gt;ファイルが見つからない時、Cake は“ページが見つかりません”というページを表示
(app/views/errors/error404.thtml)&lt;/span&gt;
１以上(デバッグモード) : pr()、debug() 関数の結果を出力。flash メッセージによるページ転送を自動的にストップする
&lt;span&gt;ファイルが見つからない時、"Missing Controller,"（「コントローラが見つからない」） "Missing Action,"（「アクションが見つからない」） といった生成エラーページを表示&lt;/span&gt;
※２以上:ページの最後の部分に SQL ステートメントの結果が表示される&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CAKE_SESSION_COOKIE&lt;/strong&gt; : CakePHP プログラムでセッションを使う際のクッキーの名前を指定&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CAKE_SECURITY&lt;/strong&gt; : セッションチェックのレベル。セッションのタイムアウト、新しいセッションIDの生成、古いセッションファイルの削除などを設定
high : １０秒間の無操作でセッションがタイムアウト。セッション id をリクエスト毎に再生成
medium : ２０分間の無操作でセッションがタイムアウト
low : ３０分間の無操作でセッションがタイムアウト&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;CAKE_SESSION_SAVE&lt;/strong&gt; : セッションデータの保存方法を指定
cake : セッションデータは、Cake をインストールしたディレクトリ内「tmp」に保存
php : セッションデータは「php.ini」で定義された場所に保存
database : セッションデータは「default」キーで定義されたデータベース接続で保存&lt;/p&gt;
&lt;/pre&gt;
&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.cakephp.jp/doc/ch04s02.html" title="4.2. グローバル設定"&gt;4.2. グローバル設定&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4544060913257605762?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4544060913257605762/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4544060913257605762' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4544060913257605762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4544060913257605762'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_7578.html' title='グローバル設定'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-7669628938420493919</id><published>2008-03-25T00:26:00.005+09:00</published><updated>2008-03-25T01:16:45.446+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='データベース'/><category scheme='http://www.blogger.com/atom/ns#' term='インストール'/><title type='text'>データベースの設定</title><content type='html'>&lt;p&gt;
CakePHP で使用するデータベースの設定は「cake/app/config/database.php」をサーバの環境に合わせて編集して行います。&lt;br /&gt;
ファイルが存在しない時は「database.php.default」のコピーを作成し、ファイル名を「database.php」に変更して編集します。
&lt;/p&gt;
&lt;pre&gt;
// app/config/database.php
&lt;code&gt;
var $default = array('driver' =&gt; 'mysql（ドライバ）',
                     // CakePHP でサポートされるドライバ：mysql、postgres、sqlite、pear-ドライバ名(pear-mysql など)、adodb-ドライバ名
                     'connect' =&gt; 'mysql_connect（接続方法）',
                     // データベース接続を持続的に扱うかどうか指定
                     'host' =&gt; 'localhost（ホスト名）',
                     'login' =&gt; 'user（ユーザ名）',
                     'password' =&gt; 'password（パスワード）',
                     'database' =&gt; 'project_name（プロジェクト名）',
                     'prefix' =&gt; '（テーブル接頭辞の指定）');
&lt;/code&gt;
&lt;span&gt;※「prefix(テーブル接頭辞)」を指定すると CakePHP から作成されるデータベースのテーブル名の全てにつけられます。&lt;br /&gt;
使用するデータベースが他のプログラムでも使用されてる場合は管理がし易くなると思います。&lt;/span&gt;
&lt;/pre&gt;
&lt;p&gt;
CakePHP のデータベーステーブルには以下の規約があります。
&lt;/p&gt;
&lt;blockquote cite="http://www.cakephp.jp/doc/configuration.html#id4798239"&gt;
&lt;ul&gt;
  &lt;li&gt;
      Cake で使用するテーブル名は、英語の複数形にしてください。"users"、 "authors" 、 "articles" などです。注意：対応するモデルの名前は単数形になります。
  &lt;/li&gt;
  &lt;li&gt;
       テーブルには、'id' という名前の primary key がなければなりません。
  &lt;/li&gt;
  &lt;li&gt;
      テーブル同士を関連付けるのであれば、外部キーは、 'article_id' のようにしてください。テーブル名の単数形にアンダースコア（アンダーバー）を付け、最後に 'id' を付けます。
   &lt;/li&gt;
   &lt;li&gt;
      テーブルに、'created'（作成） や 'modified'（修正）という列があると、Cake はしかるべき時、フィールドにデータを自動的に書き込みます。
   &lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;p&gt;
データベースその他については以下のエントリのような規則があります。&lt;br /&gt;
&lt;a href="http://cakephp-saboten.blogspot.com/2008/03/blog-post_21.html" title="PHP on the Cake !: 命名規則"&gt;命名規則&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;
「database.php」ファイルには、&lt;code&gt;$test&lt;/code&gt; という接続設定も含まれています。&lt;br /&gt;
ここに設定を記入し、任意の接続方法を選択してデータベースを利用できます。&lt;br /&gt;
使い方は、アプリケーションの「model」内で
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
var $useDbConfig = 'test';
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;のように設定することで、&lt;code&gt;$test&lt;/code&gt; 設定によるデータベース接続が出来ます。&lt;/p&gt;
&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.cakephp.jp/doc/configuration.html#id4798239" title="４章　設定"&gt;4.1.  データベースの設定&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-7669628938420493919?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/7669628938420493919/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=7669628938420493919' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7669628938420493919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7669628938420493919'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_25.html' title='データベースの設定'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8399873883941019245</id><published>2008-03-24T15:07:00.002+09:00</published><updated>2008-03-24T16:48:45.517+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='公開する'/><title type='text'>CakePHP のディレクトリ構成を変更する</title><content type='html'>&lt;p&gt;システムを公開する場合に、CakePHP のコアライブラリやアプリケーションコード(コントローラ、モデル、ビューなど)は公開しない様にディレクトリの構成を変更します。&lt;/p&gt;
&lt;p&gt;CakePHPの初期状態では下記のようなディレクトリ構成になっています。&lt;/p&gt;
&lt;pre&gt;
/cake
    |-app
        |-config
        |-controllers
        |-models
        |-plugins
        |-tmp
        |-vendors
        |-views
        |-webroot(Web公開用ディレクトリ)
        .htaccess
        index.php
    |-cake(CakePHP コアライブラリ)
    |-vendors
    .htaccess
    index.php
&lt;/pre&gt;

&lt;p&gt;共用サーバ用に、新しい「webroot」として「public_html」に変更します。&lt;/p&gt;
&lt;pre&gt;
/cake
    |-app
        |-config
        |-controllers
        |-models
        |-plugins
        |-tmp
        |-vendors
        |-views
        .htaccess
        index.php
    |-cake  (CakePHP コアライブラリ)
    |-vendors
    .htaccess
    index.php
    |-cake
/public_html  (Web公開用ディレクトリ)
&lt;/pre&gt;
&lt;p&gt;
「/app/webroot/index.php」を編集して、「webroot」「app」「cake」ディレクトリの設定を変更します。
設定ファイルで編集する箇所は以下の3つの定数です。
&lt;/p&gt;
&lt;pre&gt;
ROOT //「app」フォルダを含むディレクトリのパスを設定
APP_DIR //「app」フォルダのパス名を設定
CAKE_CORE_INCLUDE_PATH // コアライブラリ「cake」ディレクトリのパスを設定
&lt;/pre&gt;

&lt;pre&gt;
 //「app/webroot/index.php」
&lt;code&gt;
 if (!defined('ROOT'))
{
define('ROOT', dirname(dirname(dirname(__FILE__))));
}
if (!defined('APP_DIR'))
{
define ('APP_DIR', basename(dirname(dirname(__FILE__))));
}
if (!defined('CAKE_CORE_INCLUDE_PATH'))
{
define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これを下記のように変更&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
if (!defined('ROOT')) {
    define('ROOT', DS.'virtual'.DS.'example'.DS.'cake');
    //「/virtual/example/cake」
}

if (!defined('APP_DIR')) {
 //define('APP_DIR', 'DIRECTORY NAME OF APPLICATION';
    define('APP_DIR', 'app');
}

if (!defined('CAKE_CORE_INCLUDE_PATH')) {
    define('CAKE_CORE_INCLUDE_PATH', ROOT);
}
&lt;/code&gt;&lt;/pre&gt;

&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;
&lt;a href="http://www.cakephp.jp/doc/ch03s04.html" title="3.4. CakePHP のセットアップ"&gt;3.4. CakePHP のセットアップ&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://massat.jp/2007/01/08/110" title="massat.jp - xreaでCakePHPを使う"&gt;xreaでCakePHPを使う&lt;/a&gt; - &lt;cite&gt;massat.jp&lt;/cite&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://iwasaki.aipostyle.jp/2008/01/26/cakephp.html" title="CakePHPのディレクトリ構造を変更する:サイト制作:LifeHacks with Aipo"&gt;CakePHPのディレクトリ構造を変更する&lt;/a&gt; - &lt;cite&gt;LifeHacks with Aipo&lt;/cite&gt;
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8399873883941019245?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8399873883941019245/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8399873883941019245' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8399873883941019245'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8399873883941019245'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/cakephp_24.html' title='CakePHP のディレクトリ構成を変更する'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-3615517790939276596</id><published>2008-03-21T18:15:00.003+09:00</published><updated>2008-03-27T22:04:40.108+09:00</updated><title type='text'>命名規則</title><content type='html'>&lt;p&gt;&lt;a href="http://www.cakephp.jp/doc/apcs02.html"&gt;C.2. ファイル名&lt;/a&gt;&lt;/p&gt;
ファイル名に アンダースコア（アンダーバー）を使用する場合、直後の頭文字は大文字にする。&lt;br /&gt; 「my_nifty_class.php」 というファイル名なら「MyNiftyClass」 というクラス名。
コントローラ
「my_tests_controller.php」というファイル名なら「MyTestsController」 というクラスになる（ファイル名の中に「 _controller」 が入ることに注意。）
モデル
「my_test.php」というファイル名なら「MyTest」というクラス名のモデルになる。
コンポーネント
「my_mail.php」というファイル名なら、「MyMailComponent」 という名前のコンポーネント。（ファイル名に _component は必要ない。）
ヘルパー
「my_helper.php」というファイル名なら、「MyHelper」 という名前のヘルパー。
&lt;h4&gt;参考リンク&lt;/h4&gt;
&lt;p&gt;&lt;a href="http://www.cakephp.jp/doc/ch04s05.html" title="4.5. (任意） カスタム Inflections 設定" &gt;4.5. (任意） カスタム Inflections 設定&lt;/a&gt; - &lt;cite&gt;CakePHP プログラマーズ リファレンスガイド&lt;/cite&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-3615517790939276596?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/3615517790939276596/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=3615517790939276596' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/3615517790939276596'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/3615517790939276596'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_21.html' title='命名規則'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4747661703466244643</id><published>2008-03-21T17:38:00.005+09:00</published><updated>2008-03-23T19:33:37.680+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='モデル'/><category scheme='http://www.blogger.com/atom/ns#' term='アソシエーション'/><title type='text'>アソシエーション - CakePHP で リレーショナル・データベース</title><content type='html'>&lt;p&gt;&lt;a href="http://www.cakephp.jp/doc/ch06s04.html"&gt;6.4. アソシエーション&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;
CakePHP でのテーブル間の繋がりをアソシエーションという。&lt;br /&gt;
リレーショナル・データベースを CakePHP のモデルで構築出来る。&lt;br /&gt;
&lt;span&gt;※SQLで言えばJOINで２つのテーブルを結合すること&lt;/span&gt;&lt;br /&gt;
アソシエーションには四種類ある。
&lt;/p&gt;
&lt;pre&gt;
      hasOne
      hasMany
      belongsTo
      hasAndBelongsToMany
&lt;/pre&gt;
&lt;p&gt;二つのモデル間で成り立つ関係は&lt;/p&gt;
&lt;pre&gt;
hasOne - belongsTo (ユーザとプロフィールとか)
hasMany - belongsTo(ユーザと日記とか)
&lt;/pre&gt;
&lt;p&gt;プロフィールと日記を結び付けたかったら hasAndBelongsToMany を使う。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4747661703466244643?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4747661703466244643/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4747661703466244643' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4747661703466244643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4747661703466244643'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/cakephp_21.html' title='アソシエーション - CakePHP で リレーショナル・データベース'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4505739221845556043</id><published>2008-03-15T11:53:00.001+09:00</published><updated>2008-03-15T12:28:07.604+09:00</updated><title type='text'>ページのキャッシュ設定</title><content type='html'>&lt;p&gt;CakePHP のビューをキャッシュする設定方法。&lt;br /&gt;
&lt;strong&gt;cake1.1.6以下ではエラーになるので、1.1.7以上で行う。&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;「app/config/core.php」でキャッシュの設定を有効にする。&lt;/p&gt;
&lt;pre&gt;
/app/config/core.php
      //1.1系
      &lt;code&gt;define ('CACHE_CHECK', true);&lt;/code&gt;
      //1.2系
      &lt;code&gt;Configure::write('Cache.check', true);&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;コントローラのヘルパに cacheヘルパを追加。&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var $helpers = array('Cache');&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;コントローラにキャッシュさせるアクションとキャッシュの有効期限を設定。&lt;/p&gt;
&lt;pre&gt;
&lt;code&gt;var $cacheAction = array('index'=&gt;'1 hour');&lt;/code&gt;
//もしくは
&lt;code&gt;var $cacheAction = array('index'=&gt;3600);&lt;/code&gt;//秒単位で指定
&lt;/pre&gt;

&lt;p&gt;以上の設定で「http://host/controller/index」にアクセスされたときのキャッシュが「app/tmp/cache/views/」 に作成されます。ファイル名は「controller_index.php」。&lt;br /&gt;
「http://host/controller/index/mode1」などアクションに引数を渡す場合も、それぞれファイルが作成されます。ファイル名は「controller_index_mode1.php」。
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4505739221845556043?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4505739221845556043/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4505739221845556043' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4505739221845556043'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4505739221845556043'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_15.html' title='ページのキャッシュ設定'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-7597820019674878533</id><published>2008-03-13T16:03:00.002+09:00</published><updated>2008-03-13T16:31:30.194+09:00</updated><title type='text'>ヘルパーで画像ボタン</title><content type='html'>&lt;p&gt;
CakePHP のヘルパーで、 image 属性の input タグを出力する方法。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php echo $html-&amp;gt;input('Form/image',array('type' =&amp;gt; 'image', 'src' =&amp;lt; 'img/button_form_send.jpg', 'alt' =&amp;gt; '送信')) ?&amp;gt;
&lt;/code&gt;
//出力
&lt;code&gt;
&amp;lt;input type="image" name="data[Form][image]" src="img/button_form_send.jpg" alt="送信" value="" id="image"&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
CakePHP に関するサイトには皆、&lt;code&gt;$html-&amp;gt;input()&lt;/code&gt; はテキスト入力の input タグを出力するヘルパーと説明されてる。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php echo $html-&amp;gt;input('Form/image',array('size' =&amp;gt; '10', 'maxlength' =&amp;gt; '10')) ?&amp;gt;
&lt;/code&gt;
//出力
&lt;code&gt;
&amp;lt;input type="text" name="data[Form][image]" size="10" maxlength="10" &amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;実際は、デフォルトが「&lt;code&gt;type="text"&lt;/code&gt;」なだけでタグの属性は第二引数の配列で指定が可能。&lt;br /&gt;試してないが、&lt;code&gt;$html-&amp;gt;radio()&lt;/code&gt;とか使わずに出力できそうだ。面倒だからしないけど。&lt;/p&gt;
&lt;p&gt;
他にも id と value がデフォルトになっていた。命名規則とか厳しいので固定かと思ってたが属性は自由になりそうだ。
&lt;/p&gt;
&lt;p&gt;
ソースは見てみるものだ。危うく自作するところだった。&lt;br /&gt;
$html ヘルパー&lt;br /&gt; cake/libs/view/helpers/html.php
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-7597820019674878533?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/7597820019674878533/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=7597820019674878533' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7597820019674878533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/7597820019674878533'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_13.html' title='ヘルパーで画像ボタン'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5585094084711326532</id><published>2008-03-12T10:18:00.005+09:00</published><updated>2008-03-17T16:12:34.602+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='helper'/><title type='text'>ラジオボタンのヘルパー(追記:2008/03/17)</title><content type='html'>&lt;pre&gt;&lt;code&gt;
string radio(string $fieldName, arrray $options [,string $inbetween=null [,array $htmlAttributes=array() [,bool $return=false ]]])
&lt;/code&gt;
$fieldName：
    name属性の値
$option：
    array(’value’=&gt;’表示名’);
    value は value=”value” になり、表示名はラジオボタンの後ろに表示される文字名
$inbetween：
    ラジオボタンの間に表示される文字列
$htmlAttributes：
    html の属性 array(’属性名’=&gt;’値’)で指定する
$return：
    ヘルパーの自動出力
&lt;/pre&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php echo $html-&amp;gt;radio('Model/field', array('1'=&amp;gt;'option1','2'=&amp;gt;'option2', '3'=&gt;'option3'), ' | ', array('onchange'=&amp;gt;'alert(this.value)', 'class' =&amp;gt; 'myradio', 'style' =&amp;gt; 'margin:5px;'), false); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;pre&gt;
&lt;input type="radio" name="data[Model][field]" id="field_1" onchange="alert(this.value)" value="1"  /&gt;option1 | &lt;input type="radio" name="data[Model][field]" id="field_2" onchange="alert(this.value)" value="2"  /&gt;option2 | &lt;input type="radio" name="data[Model][field]" id="field_3" onchange="alert(this.value)" value="3"  /&gt;option3 |&lt;code&gt;
&amp;lt;input type="radio" name="data[Model][field]" id="field_1" onchange="alert(this.value)" value="1"  /&amp;gt;option1 |
&amp;lt;input type="radio" name="data[Model][field]" id="field_2" onchange="alert(this.value)" value="2"  /&amp;gt;option2 |
&amp;lt;input type="radio" name="data[Model][field]" id="field_3" onchange="alert(this.value)" value="3"  /&amp;gt;option3 |
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;次のようにもかける。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php echo $html-&amp;gt;radio('Model/field', array('1'=&amp;gt;'option1'), ' | ', array('checked' =&gt; 'checked'); ?&amp;gt;
&amp;lt;?php echo $html-&amp;gt;radio('Model/field', array('2'=&amp;gt;'option2'), ' | '); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;
任意のボタンに初期値としてチェックを入れたい場合はこの記法。&lt;ins datetime="2008-03-17T00:00:00+09:00"&gt;(&lt;a href="#ins_2008_03_17"&gt;※2008/03/17 追記&lt;/a&gt;)&lt;/ins&gt;&lt;br /&gt;
前述の様にラジオボタンをまとめて記述した場合に、「&lt;code&gt;'checked' =&gt; 'checked'&lt;/code&gt;」とすると最後のラジオボタンがチェックされる。&lt;br /&gt;
コーディングやデザイン上の都合でも有効。
&lt;/p&gt;
&lt;p&gt;
値に文字列を与えると以下の様になる。&lt;br /&gt;
おとなしく数字で対応させて処理しなさいってことで。数字の方が値チェックも楽だし。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php echo $html-&amp;gt;radio('Model/field', array('ヴァリュ'=&amp;gt;'オプション1'); ?&amp;gt;
&amp;lt;input type="radio" name="data[Model][field]" id="field_ヴァリュ" onchange="alert(this.value)" value="ヴァリュ"  /&amp;gt;オプション1
&lt;/code&gt;&lt;/pre&gt;
&lt;div id="ins_2008_03_17"&gt;
&lt;strong&gt;※2008年3月17日追記&lt;/strong&gt;&lt;br /&gt;
&lt;p&gt;以下の様に記述することでヘルパーから任意のラジオボタンに初期値でチェックを入れられるようだ。&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
&amp;lt;?php echo $html-&amp;gt;radio('Model/field', array('1'=&amp;gt;'option1','2'=&amp;gt;'option2', '3'=&gt;'option3'), ' | ', array(&lt;strong&gt;'value' =&amp;gt; '2'&lt;/strong&gt;)); ?&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;これで2つ目のラジオボタンに「&lt;code&gt;checked = "check"&lt;/code&gt;」&lt;/p&gt;が指定できる。&lt;br /&gt;
ソース見てよかった。
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5585094084711326532?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5585094084711326532/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5585094084711326532' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5585094084711326532'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5585094084711326532'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post_12.html' title='ラジオボタンのヘルパー(追記:2008/03/17)'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4272631897591552800</id><published>2008-03-07T18:28:00.000+09:00</published><updated>2008-03-07T18:29:34.543+09:00</updated><title type='text'>CakePHPシステムデザイン（最新規約）</title><content type='html'>&lt;a href="http://cakephp.jp/modules/newbb/viewtopic.php?forum=3&amp;amp;post_id=650&amp;amp;topic_id=369"&gt;CakePHPシステムデザイン（最新規約）&lt;/a&gt;
&lt;p&gt;命名規則やファイル構成(ヘッダ、フッタの設定)など。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4272631897591552800?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4272631897591552800/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4272631897591552800' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4272631897591552800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4272631897591552800'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/cakephp.html' title='CakePHPシステムデザイン（最新規約）'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5627672075795309956</id><published>2008-03-05T10:40:00.004+09:00</published><updated>2008-03-05T11:10:13.283+09:00</updated><title type='text'>view 内のforeach、if の記述</title><content type='html'>&lt;p&gt;
CakePHP のヴューファイルでのforeach 文、if 文の記述例。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt; 
           :

  &amp;lt;table&amp;gt;
     &amp;lt;?php foreach ($array as $data): ?&amp;gt;
       &amp;lt;tr&amp;gt;
        &amp;lt;?php foreach ($data as $key=&amp;gt;$val): ?&amp;gt;
         &amp;lt;?php if ( !empty($val)): ?&amp;gt;
         &amp;lt;td&amp;gt;&amp;lt;? echo $key,$val; ?&amp;gt;&amp;lt;/td&amp;gt;
         &amp;lt;? endif; ?&amp;gt;
        &amp;lt;?php endforeach; ?&amp;gt;
      &amp;lt;/tr&amp;gt;
      &amp;lt;?php endforeach; ?&amp;gt;
   &amp;lt;/table&amp;gt;
           :
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;括弧を使わない形式が何故良いのか具体的には理由が分からなかったが、Wordpress も if～endif で記述されている様なので国際化とか見易さの問題だろうか。&lt;br /&gt;
他言語との共通だし。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5627672075795309956?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5627672075795309956/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5627672075795309956' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5627672075795309956'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5627672075795309956'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/view-foreachif.html' title='view 内のforeach、if の記述'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5837033834564738317</id><published>2008-03-03T14:43:00.002+09:00</published><updated>2008-03-03T15:31:18.196+09:00</updated><title type='text'>フォームの入力チェック</title><content type='html'>&lt;p&gt;
フォームからの入力が正しいか調べるには、以下のように $validate という変数にフォームの入力欄の name とその値の定義をかく。
&lt;/p&gt;
&lt;pre&gt;//モデル - sample.php
&lt;code&gt;
class Sample extends AppModel {
   var $name = 'Sample';
&lt;div style="text-align:center;"&gt;:&lt;/div&gt;
    var $validate = array(
        'name'  =&gt; VALID_NOT_EMPTY,
        'email' =&gt; VALID_EMAIL,
        'age' =&gt; VALID_NUMBER,
        'year' =&gt;VALID_YEAR
    );
&lt;div style="text-align:center;"&gt;:&lt;/div&gt;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;定義されてる変数の型は4つで以下のように正規表現によるチェック。&lt;/p&gt;
&lt;pre&gt;
cake/cake/libs/validators.php に定義
&lt;dl&gt;
&lt;dt&gt;VALID_NOT_EMPTY:入力の有無(必須項目のチェックとかに)&lt;/dt&gt;&lt;dd&gt;define('VALID_NOT_EMPTY', '/.+/');&lt;/dd&gt;
&lt;dt&gt;VALID_NUMBER:数字のチェック(符号付)&lt;/dt&gt;&lt;dd&gt;define('VALID_NUMBER', '/^[-+]?\\b[0-9]*\\.?[0-9]+\\b$/');&lt;/dd&gt;
&lt;dt&gt;VALID_EMAIL:メールアドレスのチェック&lt;/dt&gt;
&lt;dd&gt;define('VALID_EMAIL', 
'/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)\\z/i');
&lt;/dd&gt;
&lt;dt&gt;VALID_YEAR:年のチェック(1000～2999)&lt;/dt&gt;&lt;dd&gt;define('VALID_YEAR', '/^[12][0-9]{3}$/');&lt;/dd&gt;
&lt;/dl&gt;
&lt;/pre&gt;
&lt;p&gt;
VALID_NOT_EMPTY 以外も未入力はエラーになる。&lt;br /&gt;
VALID_NUMBER はマイナスも含まれるので、年齢チェックなどに使う場合は注意が必要。&lt;br /&gt;
$validate に VALID_XXX の代わりに直接正規表現を指定しても良さそうだ。
&lt;/p&gt;
&lt;h5&gt;関連&lt;/h5&gt;
&lt;p&gt;&lt;a href="http://www.majima.net/" title="MJ::Blog"&gt;MJ::Blog&lt;/a&gt; - http://www.majima.net/&lt;br /&gt;
&lt;a href="http://www.majima.net/php/197/" title="CakePHP 登録フォームの実装　其の三 &amp;raquo; MJ::Blog"&gt;CakePHP 登録フォームの実装 其の三&lt;/a&gt;&lt;br /&gt;
独自の「入力エラーメッセージ表示」ヘルパーを作成。
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5837033834564738317?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5837033834564738317/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5837033834564738317' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5837033834564738317'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5837033834564738317'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/blog-post.html' title='フォームの入力チェック'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8555447927941350591</id><published>2008-03-03T10:50:00.003+09:00</published><updated>2008-03-03T11:00:53.528+09:00</updated><title type='text'>CakePHPのscaffoldを日本語化</title><content type='html'>&lt;dl&gt;&lt;dt&gt;&lt;a href="http://www.msng.info/" title="頭ん中"&gt;頭ん中&lt;/a&gt; - http://www.msng.info/&lt;/dt&gt;&lt;dd&gt;&lt;a href="http://www.msng.info/archives/2008/02/cakephp_scaffold.php" title="CakePHPのscaffoldを日本語化してみた - 頭ん中"&gt;CakePHPのscaffoldを日本語化してみたComments&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;p&gt;自己責任。&lt;/p&gt;
&lt;blockquote cite="http://www.msng.info/archives/2008/02/cakephp_scaffold.php"&gt;
&lt;p&gt;CakePHP の scaffold は
簡易管理画面として使うのに便利なのだが、
当然ながら英語で表示されるので&lt;br /&gt;
～略～&lt;br /&gt;
日本語で表示されるようにしてみた。&lt;/p&gt;

&lt;p&gt;ビューを簡単に書き換えただけなので
まだ英語で残っている部分もあるけど、
ないよりはマシかなと思うので置いておきます。&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.msng.info/archives/2008/02/cakephp_scaffold.php"&gt;scaffolds.zip&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;これをダウンロードして解凍して&lt;br /&gt;
app/views/scaffolds&lt;br /&gt;
の中に&lt;br /&gt;
edit.ctp, index.ctp, view.ctp を置くだけ。&lt;p&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8555447927941350591?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8555447927941350591/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8555447927941350591' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8555447927941350591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8555447927941350591'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/03/cakephpscaffold.html' title='CakePHPのscaffoldを日本語化'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8050472546866072450</id><published>2008-02-26T18:24:00.001+09:00</published><updated>2008-02-26T18:26:07.039+09:00</updated><title type='text'>公開する</title><content type='html'>&lt;a href="http://www.1x1.jp/blog/2007/11/cakephp_not_print_debuglog.html"&gt;CakePHP 公開する時はデバッグ情報を出さない&lt;/a&gt;
&lt;a href="http://iwasaki.aipostyle.jp/2008/01/26/cakephp.html"&gt;CakePHPのディレクトリ構造を変更する&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8050472546866072450?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8050472546866072450/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8050472546866072450' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8050472546866072450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8050472546866072450'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_3818.html' title='公開する'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-1401261764662185255</id><published>2008-02-26T18:23:00.000+09:00</published><updated>2008-02-26T18:24:30.765+09:00</updated><title type='text'>データベース</title><content type='html'>&lt;a href="http://d.hatena.ne.jp/mallowlabs/20080109/1199842267"&gt;CakePHP で複数のデータベースを使用する&lt;/a&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/142"&gt;CakePHP 環境によってデータベースを切り替える&lt;/a&gt;
&lt;a href="http://www.1x1.jp/blog/2007/08/cakephp_no_db.html"&gt;CakePHP データベースを使わないアプリケーション&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-1401261764662185255?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/1401261764662185255/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=1401261764662185255' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1401261764662185255'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1401261764662185255'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_522.html' title='データベース'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-1721836206862559274</id><published>2008-02-26T18:20:00.003+09:00</published><updated>2008-02-26T18:26:56.308+09:00</updated><title type='text'>コンポーネント</title><content type='html'>&lt;a href="http://www.cakephp.jp/doc/index.html"&gt;9. コンポーネント&lt;/a&gt;
&lt;a href="http://d.hatena.ne.jp/takuya15/20070912/1189593883"&gt;Cake PHP コンポーネントでモデルを使用する方法&lt;/a&gt;
&lt;a href="http://dxd8.com/archives/11/"&gt;CakePHPでアプリケーションの設定をデータベースに保存する&lt;/a&gt;
&lt;a href="http://www.1x1.jp/blog/2006/09/cakephp_common_models_components_helpers.html"&gt;CakePHP controller共通のモデル、コンポーネント、ヘルパーを設定する&lt;/a&gt;
&lt;a href="http://www.1x1.jp/blog/2008/01/cakephp_adminauthcomponent.html"&gt;CakePHP 管理者サイトでBasic認証を簡単に行うコンポーネント&lt;/a&gt;
&lt;a href="http://www.cpa-lab.com/tech/086"&gt;CakePHPの日本語高機能メールコンポーネント&lt;/a&gt;
&lt;a href="http://code.nanigac.com/source/view/323"&gt;CakePHPで自動ログインコンポーネント&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-1721836206862559274?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/1721836206862559274/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=1721836206862559274' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1721836206862559274'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1721836206862559274'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_26.html' title='コンポーネント'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-8906398969515236035</id><published>2008-02-25T15:59:00.004+09:00</published><updated>2008-03-03T15:34:25.229+09:00</updated><title type='text'>メールアドレスが正しいか正規表現でチェック</title><content type='html'>&lt;p&gt;
CakePHP のデータ入力チェックは以下の正規表現で行われているようだ。
&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;
define('VALID_EMAIL', '/¥¥A(?:^([a-z0-9][a-z0-9_¥¥-¥¥.¥¥+]*)@([a-z0-9][a-z0-9¥¥.¥¥-]{0,63}¥¥.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)¥¥z/i');
&lt;/code&gt;&lt;/pre&gt;
&lt;h5&gt;参考&lt;/h5&gt;
&lt;p&gt;
ハズレ日記 - http://catbot.net/blog/&lt;br /&gt;
&lt;a href="http://catbot.net/blog/2007/06/re_php.html" title="re: PHPでメールアドレスかどうか調べる方法 (ハズレ日記)"&gt;re: PHPでメールアドレスかどうか調べる方法&lt;/a&gt;
&lt;/p&gt;
&lt;h5&gt;関連&lt;/h5&gt;
&lt;p&gt;PHP on the Cake ! - 2008年3月3日&lt;br /&gt;
&lt;a href="http://cakephp-saboten.blogspot.com/2008/03/blog-post.html" title="PHP on the Cake !: フォームの入力チェック"&gt;フォームの入力チェック&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-8906398969515236035?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/8906398969515236035/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=8906398969515236035' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8906398969515236035'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/8906398969515236035'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_25.html' title='メールアドレスが正しいか正規表現でチェック'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5532120634744866206</id><published>2008-02-19T15:29:00.001+09:00</published><updated>2008-02-19T15:34:01.161+09:00</updated><title type='text'>CakePHPとAPI</title><content type='html'>&lt;dl&gt;&lt;dt&gt;&lt;cite&gt;神童&lt;/cite&gt;&lt;/dt&gt;&lt;dd&gt;&lt;a href="http://kamiwarashi.blogspot.com/2007/02/cakephpwebapi3.html" title="神童: cakephpでwebサービスapiを活用したサンプルサイトを作ってみる3"&gt;cakephpでwebサービスapiを活用したサンプルサイトを作ってみる3&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5532120634744866206?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5532120634744866206/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5532120634744866206' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5532120634744866206'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5532120634744866206'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/cakephpapi.html' title='CakePHPとAPI'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-5034939776538553945</id><published>2008-02-19T15:17:00.002+09:00</published><updated>2008-02-19T15:28:03.458+09:00</updated><title type='text'>参考サイト</title><content type='html'>&lt;dl&gt;&lt;dt&gt;&lt;cite&gt;Sun Limited Mt.&lt;/cite&gt;&lt;/dt&gt;
&lt;dd&gt;
&lt;a href="http://www.syuhari.jp/blog/archives/186" title="CakePHP Ajax のフォームを作成する | Sun Limited Mt."&gt;CakePHP Ajax のフォームを作成する&lt;/a&gt;
&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://www.syuhari.jp/blog/archives/133" title="CakePHP 管理画面を作成する方法 | Sun Limited Mt."&gt;CakePHP 管理画面を作成する方法&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://www.syuhari.jp/blog/archives/121" title="CakePHP 携帯でセションを有効にする | Sun Limited Mt."&gt;CakePHP 携帯でセションを有効にする&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://www.syuhari.jp/blog/archives/123" title="CakePHP ファイルアップロードするコンポーネント | Sun Limited Mt."&gt;CakePHP ファイルアップロードするコンポーネント&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://www.syuhari.jp/blog/archives/178" title="CakePHP jQuery を使用した Ajax ファイルアップロード | Sun Limited Mt."&gt;CakePHP jQuery を使用した Ajax ファイルアップロード&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://www.syuhari.jp/blog/archives/161" title="CakePHP JQuery ヘルパー | Sun Limited Mt."&gt;CakePHP JQuery ヘルパー&lt;/a&gt;&lt;/dd&gt;
&lt;dd&gt;&lt;a href="http://www.syuhari.jp/blog/archives/148" title="CakePHP Security コンポーネントのまとめ | Sun Limited Mt."&gt;CakePHP Security コンポーネントのまとめ&lt;/a&gt;&lt;/dd&gt;
&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-5034939776538553945?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/5034939776538553945/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=5034939776538553945' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5034939776538553945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/5034939776538553945'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_4625.html' title='参考サイト'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-6479206318535335363</id><published>2008-02-19T15:07:00.002+09:00</published><updated>2008-02-19T15:16:57.062+09:00</updated><title type='text'>静的なページの作り方</title><content type='html'>&lt;p&gt;
CakePHP フレームワークには M(モデル)V(ヴュー)C(コントローラ)の仕組みがある。&lt;br /&gt;
次の様なページが作れる。
&lt;/p&gt;
&lt;dl&gt;&lt;dt&gt;&lt;cite&gt;Kemworld::Diary&lt;/cite&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://d.hatena.ne.jp/kemworld/20070827" title="2007-08-27 - Kemworld::Diary"&gt;cakephpで普通のページを作る。&lt;/a&gt;&lt;/dd&gt;&lt;/dl&gt;
&lt;blockquote cite="http://d.hatena.ne.jp/kemworld/20070827"&gt;
&lt;ol&gt;&lt;li&gt;「V（ビュー）だけ使う」→静的なページ（いわゆる普通のページ）。&lt;/li&gt;
&lt;li&gt;「V（ビュー）とC（コントローラ）だけ使う」→DBは使わないけどビジネスロジックはあるページ。&lt;/li&gt;
&lt;li&gt;「M（モデル）V（ビュー）C（コントローラ）全部使う」→ビジネスロジックがあってDBにデータを保存したり内容を表示したりするページ。&lt;/li&gt;&lt;/ol&gt;
&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-6479206318535335363?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/6479206318535335363/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=6479206318535335363' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6479206318535335363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/6479206318535335363'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_1908.html' title='静的なページの作り方'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-1108178332925931912</id><published>2008-02-19T14:57:00.002+09:00</published><updated>2008-02-19T15:07:37.946+09:00</updated><title type='text'>プラグインの作成</title><content type='html'>&lt;dl&gt;&lt;dt&gt;&lt;cite&gt;TOYOSYSTEM&lt;/cite&gt;&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://www.jamboree.jp/cms/archives/16" title="toyosystem    |  CakePHP::メール送信プラグインを書いた"&gt;CakePHP::メール送信プラグインを書いた&lt;/a&gt;
&lt;/dd&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-1108178332925931912?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/1108178332925931912/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=1108178332925931912' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1108178332925931912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/1108178332925931912'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post_19.html' title='プラグインの作成'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-4757375466690318820</id><published>2008-02-04T01:21:00.002+09:00</published><updated>2008-03-24T23:34:08.268+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='インストール'/><title type='text'>インストールについて</title><content type='html'>&lt;h5&gt;動作環境&lt;/h5&gt;
&lt;p&gt;CakePHP を動作させるために必要なサーバのセットアップ条件は下記の通りです。
&lt;/p&gt;
&lt;pre&gt;
HTTP サーバ(Apacheなど)
    sessions、 mod_rewrite(必須ではないがある方が良い)
PHP 4.3.2 以降(PHP 4 、PHP 5 どちらでも可)
データベース(MySQL、PostgreSQL、ADODBをサポート)
&lt;/pre&gt;
&lt;h5&gt;ダウンロード&lt;/h5&gt;
&lt;p&gt;以下のサイトから CakePHP パッケージをダウンロードします。(ここではZIPファイルをダウンロードしました)&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;&lt;a href="http://cakeforge.org/projects/cakephp/"&gt;CakeForge: CakePHP: Project Info&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;「Latest File Releases」-&gt;「Pacake」-&gt;「Beta」または「Stable」から(2008/03/23 現在は「1.2.0.6311-beta」と 「1.1.19.6305」)&lt;/dd&gt;
&lt;dt&gt;&lt;a href="http://cakephp.org/downloads/index/nightly"&gt;CakePHP: the rapid development php framework. Downloads&lt;/a&gt;&lt;/dt&gt;
&lt;dd&gt;「Downloads」-&gt;「Name」-&gt;「1.1.x.x」または「1.2.x.x」のリンクから&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;nightly は最新リリースのベータ版のようです。CakeForge から安定版をダウンロードするのが無難でしょう。&lt;/p&gt;

&lt;h5&gt;セットアップ&lt;/h5&gt;
&lt;p&gt;ダウンロードしたCakePHPパッケージのセットアップする方法を説明します。ここではzipファイルを使います。&lt;/p&gt;
&lt;p&gt;ダウンロードしたzipファイルを解凍して、サーバの任意のディレクトリに設置します。ここではドキュメントルートディレクトリに設置しました。&lt;/p&gt;
&lt;pre&gt;
/public_html
    /cake
        /app
        /cake
        /vendors
        .htaccess
        index.php
&lt;/pre&gt;
&lt;p&gt;この場合、以下の様なURLでアクセス出来ます。&lt;/p&gt;
&lt;pre&gt;
http://www.example.com/cake/コントローラ名/アクション名/パラメータ1/パラメータ2
&lt;/pre&gt;
&lt;p&gt;構成の詳細は次のようになります。&lt;/p&gt;
&lt;pre&gt;
/public_html
    /cake
        /app
            /config
            /controllers
            /models
            /plugins
            /tmp
            /vendors
            /views
            /webroot
            .htaccess
            &lt;span&gt;index.php&lt;/span&gt;
        /cake
        /vendors
        .htaccess
        index.php
&lt;/pre&gt;
&lt;p&gt;「http://www.example.com/cake/」でアクセスされるのは「…/cake/app/webroot/index.php」になります。
「http://www.example.com/cake/コントローラ/」でアクセスされるコントローラファイルは「…/cake/app/controllers/」に置かれます。
&lt;/p&gt;
&lt;p&gt;「http://www.example.com/cake/index.php」にアクセスしてCakePHPのページが表示されたら準備は完了です。&lt;/p&gt;
&lt;p&gt;システムを公開する場合は、自宅サーバなどルート権限を持っているならサーバのDocumentRootを変更して CakePHP を設置したディレクトリを隠します。&lt;/p&gt;
&lt;pre&gt;
// httpd.conf 
&lt;code&gt;DocumentRoot /public_html/cake/app/webroot&lt;/code&gt;
&lt;/pre&gt;
&lt;p&gt;これで「http://www.example.com/」のアクセスが「…/cake/app/webroot/index.php」になります。&lt;/p&gt;
&lt;p&gt;サーバに応じて更にディレクトリ構成を変更したい場合には以下のエントリのようにします。&lt;/p&gt;
&lt;p&gt;&lt;a href="http://cakephp-saboten.blogspot.com/2008/03/cakephp_24.html" title="PHP on the Cake !: CakePHP のディレクトリ構成を変更する"&gt;CakePHP のディレクトリ構成を変更する&lt;/a&gt;&lt;/p&gt;
&lt;h5&gt;参考リンク&lt;/h5&gt;
&lt;p&gt;
&lt;a href="http://www.cakephp.jp/doc/ch03s04.html" title="3.4. CakePHP のセットアップ"&gt;3.4. CakePHP のセットアップ&lt;/a&gt; - CakePHP プログラマーズ リファレンスガイド
&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-4757375466690318820?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/4757375466690318820/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=4757375466690318820' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4757375466690318820'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/4757375466690318820'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/blog-post.html' title='インストールについて'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-2763018557574052519</id><published>2008-02-04T00:46:00.001+09:00</published><updated>2008-03-23T05:41:59.240+09:00</updated><title type='text'>MVCモデルについて</title><content type='html'>&lt;p&gt;
MVC は Web アプリケーションをモデル、ビュー、コントローラという三つの部分に分割する手法です。
&lt;/p&gt;
&lt;pre&gt;
&lt;strong&gt;入力(コントローラ) -&gt; 処理(モデル) -&gt; 出力(ビュー)&lt;/strong&gt;
&lt;/pre&gt;
&lt;p&gt;例を挙げると&lt;/p&gt;
&lt;pre&gt;
フォーム入力 -&gt; データ処理 -&gt; 結果表示
&lt;/pre&gt;
&lt;p&gt;と言った感じになるかと思います。&lt;/p&gt;
&lt;p&gt;このモデルのデータ処理でデータベースを扱う印象が強い為、「CakePHP は DB を使ったシステムだけ」と感じてしまいますがデータベースを使わない PHPシステムを作ることも可能です。&lt;br /&gt;
その場合は 「コントローラ -&gt; ビュー」といった仕組みになります。&lt;br /&gt;
また静的ページを扱うこともできます。&lt;/p&gt;
&lt;p&gt;個人的には、「処理(コントローラ) -&gt; データ型(モデル) -&gt; 出力(ビュー)」という感じがします。&lt;br /&gt;
コントローラはプログラムのメイン処理で、モデルではプログラムで扱うデータの型をモデル化、処理結果をビューのテンプレートで結果を表示するといった印象。&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-2763018557574052519?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/2763018557574052519/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=2763018557574052519' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2763018557574052519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/2763018557574052519'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/mvc.html' title='MVCモデルについて'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9038376899609732017.post-291320072480781718</id><published>2008-02-03T23:44:00.001+09:00</published><updated>2008-03-23T05:08:57.061+09:00</updated><title type='text'>Cake PHP について</title><content type='html'>&lt;p&gt;CakePHP は、プログラマが Web アプリケーションを作成するためのオープンソース・フレームワークです。&lt;br /&gt;
日本語リファレンスが充実しており習得が簡単です。またプログラムが表示するエラーメッセージも詳しく丁寧・親切な為、習得の助けになるでしょう。
&lt;/p&gt;
&lt;p&gt;
CakePHP の利点として、PHP 4・5どちらでも動作するということがあげられます。&lt;br /&gt;
CakePHP パッケージのみの使用で、他のライブラリを必要とせず、更には PEAR や Smarty とも併用可能となっています。&gt;&lt;br /&gt;
CakePHP の目的は、デザインとシステムの分離にあります。&gt;&lt;br /&gt;
CakePHP で構築されるシステムは、MVC(モデル - ビュー - コントローラ)モデルと呼ばれる3つからなります。&gt;&lt;br /&gt;
DB などの記述も簡単で、SQL文を意識せずデータを扱えます。&gt;&lt;br /&gt;
CakePHP は「Ruby on Rails」フレームワークから触発されて作られました。
&lt;/p&gt;
&lt;h5&gt;参考リンク&lt;/h5&gt;
&lt;dl&gt;&lt;dt&gt;PHPフレームワークの比較&lt;/dt&gt;
&lt;dd&gt;&lt;a href="http://www.tsujita.jp/blojsom/blog/default/PHP/2007/07/13/PHP%E3%83%99%E3%83%B3%E3%83%81%E3%83%9E%E3%83%BC%E3%82%AF-Zend-Framework-vs-Symfony-vs-CakePHP-vs-CodeIgniter-vs-PHP-on-TRAX.html" title="Permalink of &amp;quot;PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX&amp;quot;"&gt;PHPベンチマーク: Zend Framework vs Symfony vs CakePHP vs CodeIgniter vs PHP on TRAX&lt;/a&gt; - &lt;cite&gt;徒然なるままにBlog&lt;/cite&gt;
&lt;/dd&gt;&lt;/dl&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9038376899609732017-291320072480781718?l=cakephp-saboten.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://cakephp-saboten.blogspot.com/feeds/291320072480781718/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9038376899609732017&amp;postID=291320072480781718' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/291320072480781718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9038376899609732017/posts/default/291320072480781718'/><link rel='alternate' type='text/html' href='http://cakephp-saboten.blogspot.com/2008/02/cake-php.html' title='Cake PHP について'/><author><name>saboten009</name><uri>http://www.blogger.com/profile/05359225746693178427</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
