<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
		xmlns:xhtml="http://www.w3.org/1999/xhtml"
>

<channel>
	<title>自転車で通勤しましょ♪ブログ &#187; CakePHP</title>
	<atom:link href="http://319ring.net/blog/category/cakephp/feed" rel="self" type="application/rss+xml" />
	<link>http://319ring.net/blog</link>
	<description>自転車とか、プログラムとか、書評とか、気になったものについて書いていきます</description>
	<lastBuildDate>Fri, 03 Sep 2010 15:44:21 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/category/cakephp/feed" />
		<item>
		<title>俺的にRuby on RailsとCakePHPの比較（コーディングしやすさ）</title>
		<link>http://319ring.net/blog/archives/1154</link>
		<comments>http://319ring.net/blog/archives/1154#comments</comments>
		<pubDate>Thu, 25 Mar 2010 17:02:30 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[Ruby on Rails]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=1154</guid>
		<description><![CDATA[※先に断っておきますが、おいらはPHPerであり、Rubyは勉強中の身です。CakePHPは業務で使ったことも趣味で使ったことも、人にチョロッと教えたりもしてるくらいのレベルですが、Railsでアプリをリリースしたことは [...]]]></description>
			<content:encoded><![CDATA[<p><span class="red">※先に断っておきますが、おいらはPHPerであり、Rubyは勉強中の身です。CakePHPは業務で使ったことも趣味で使ったことも、人にチョロッと教えたりもしてるくらいのレベルですが、Railsでアプリをリリースしたことはないです。</span></p>
<p>ここのところ、毎日少しずつではあるのだけれど、『RailsによるアジャイルWebアプリケーション開発』を進めているんだけど、だんだんCakePHPのほうがサクサク開発できるんじゃないだろうか？と思うようになってきてる。自分がCakePHPのほうが慣れているし、なんといってもPHPerなので、Joel本で書かれているように頭が自分が慣れている言語を中心に考えてしまうというやつだわなぁ〜。</p>
<p>Railsはというか、Rubyがオブジェクト指向言語だから、流れが全てオブジェクトなのに対して、CakePHPはデータ関連は基本的に配列で管理するから、な〜んかシックリくる。CakePHPにおけるオブジェクトは基本的にデータを加工したりするもので、配列はデータなので、見ただけで何を表しているか大体わかるが、Railsは中身を見ないとわからないというか…。まぁ俺がRubyをまだモノにしていないヘタレというだけかもしれない…。</p>
<p>ただコード中の文字数だけで言えば、Railsのほうが少ないかな〜と思う。<br />
慣れればRailsのほうがいいのかな…。</p>
<p>PHPerとしての言い訳していいですか？</p>
<p>Viewを書く時、<br />
キーボードでphpタグの始めの&lt;?って打ちやすいけど（左手の小指でShiftキー押して右手で&lt;?を打つ）、erbの始めの&lt;%って打ちにくいんじゃ〜！！（左手の小指でShiftキー押して&lt;、次の%が…左手小指でShift押してるから左手人差し指で%が押しにくい）<br />
erbのタグはコーディングにタイムラグが発生してイラッとする。まぁ、単なるタイピングスキルの違いだが、非常に大きな違いに感じます。</p>
<p>これ、賛同者がいたら嬉しいッス！</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/1154/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/1154" />
	</item>
		<item>
		<title>CakePHP:【解決】AU携帯でSecurityComponent</title>
		<link>http://319ring.net/blog/archives/1138</link>
		<comments>http://319ring.net/blog/archives/1138#comments</comments>
		<pubDate>Wed, 17 Mar 2010 02:18:19 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Ktai Library]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=1138</guid>
		<description><![CDATA[SecurityComponentを使うとAUケータイでブラックホールに吸い込まれるという話を昨日書いたわけですが、解決方法が見つかったので、それを書きます。
ちなみにCakePHPユーザ会のほうにも投稿しておいた。
$ [...]]]></description>
			<content:encoded><![CDATA[<p>SecurityComponentを使うとAUケータイでブラックホールに吸い込まれるという話を昨日書いたわけですが、解決方法が見つかったので、それを書きます。<br />
ちなみにCakePHPユーザ会のほうにも投稿しておいた。</p>
<p><a href="http://cakephp.jp/modules/newbb/viewtopic.php?viewmode=flat&#038;topic_id=1596&#038;forum=9">$form->create で出力されるfieldsetを消す方法</a></p>
<p>昨日の投稿にも書きましたが、SecurityComponentを使うとAUケータイではdisplay:noneになってるfieldsetタグ内のトークンがPOSTされません。よって、fieldsetタグのみを削除すれば動くに違いないということで、fieldsetタグを削除する方法です。</p>
<p>参考にしたサイトは以下です（英語）。<br />
<a href="http://cakeqs.org/eng/questions/view/disable_fieldset_around_an_hidden_form_element">http://cakeqs.org/eng/questions/view/disable_fieldset_around_an_hidden_form_element</a></p>
<p>CakePHPユーザ会のほうに書いた方法でもいけると思いますが、何度も使いたいので自分はKtai LibraryのKtaiヘルパーにメソッドを追加しました。</p>
<p>/app/views/helpers/ktai.php</p>
<pre class="brush: php;">
/**
 * Ktai helper class for CakePHP1.2
 */
class KtaiHelper extends Helper {

	var $helpers = array('Html', 'Form'); // 'Form'を追加した

	var $_lib3gk = null;

// ... 最後に以下の2つのメソッドを追加
	function form_create($model = null, $options = array()){
		$out = $this-&gt;Form-&gt;create($model, $options);
		return strip_tags($out, '&lt;form&gt;&lt;input&gt;');
	}

	function form_end($options = null){
		$out = $this-&gt;Form-&gt;end($options);
		return strip_tags($out, '&lt;form&gt;&lt;input&gt;');
	}
}
</pre>
<p>View側では、以下のように使います。</p>
<pre class="brush: php;">
&lt;?php echo $ktai-&gt;form_create($model, $options); ?&gt;
</pre>
<p>AUケータイで試してみましたが、結果は上々でした。</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/1138/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/1138" />
	</item>
		<item>
		<title>CakePHP:AU携帯とSecurityコンポーネント</title>
		<link>http://319ring.net/blog/archives/1136</link>
		<comments>http://319ring.net/blog/archives/1136#comments</comments>
		<pubDate>Tue, 16 Mar 2010 14:47:25 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[携帯サイト開発]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=1136</guid>
		<description><![CDATA[現在、とあるアイドルグループの携帯用アンケートサイトを5営業日以内で作れという至上命令が下っており、そのために久々にCakePHP復活！Ktai Libraryを使ってどのケータイでも対応しちゃうぜ！ちなみにKtai L [...]]]></description>
			<content:encoded><![CDATA[<p>現在、とあるアイドルグループの携帯用アンケートサイトを5営業日以内で作れという至上命令が下っており、そのために久々にCakePHP復活！Ktai Libraryを使ってどのケータイでも対応しちゃうぜ！ちなみにKtai Libraryを使うのは初。本は買ってた。</p>
<p>データベース設計は同僚がやってくれたので（彼はDBのスペシャリスト）、俺はBakeでソースを生成し、デザイナが作ったデザインをViewに組み込み、Modelの設定を行い、Captchaコンポーネントを使った画像認証を組み込み、コントローラーに処理をゴリゴリと書き（Fat Modelになるような仕様ではないため。まぁ汎用的なメソッドはModelに作ったけど）、FireMobileSimulatorで確認しながら開発。</p>
<p>一通り実装が完了したので、実機（俺のAU携帯と後輩のSoftbank携帯）とDoCoMoのシミュレータで試すとやっぱり動かなかったりした。まぁそういうことを試すためだからいいんだけど。ソースを修正しては試す。これによりDoCoMoはOK。SoftbankもOK。しかし、AUだけPOSTしたら404と言われる。なぜだ！</p>
<p>Ktai Libraryを使ってたら、redirectのところでURLの組み立てで変になった箇所があったので（Controller::redirect()の引数に配列形式で値を渡すと壊れる。引数をis_arrayでチェックすると直った）、また似たようなことが起こってるのかなぁ～とApacheのアクセスログを見てみると、ちゃんとPOST先のURLにアクセスしている。しかし、Content-lengthが0。0とはおかしいじゃないか！</p>
<p>まさかと思ってCSRF対策用に使っていたSecurityコンポーネントのBlackHoleCallback関数を設定してログを出すようにしてみたら、ビンゴ。BlackHoleに吸い込まれているじゃないか。しかも、俺はここのPOSTはデータベース更新に関係していないのでCSRF対策してない（$this->Security->requireAuthに追加していない）。にもかかわらず、トークンが発行されてるのにも納得がいかない。</p>
<p>何がなんだかわけがわからないので、CakePHPユーザ会で検索してみたら、有力な情報を得た。</p>
<p><a href="http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=1899&#038;forum=3">携帯のblackhole 対策</a></p>
<p>Securityコンポーネントのトークンはfieldsetタグ中に囲まれているのだが、このfieldsetタグにはdisplay:none;が設定されている。AU携帯はPOSTするときにdisplay:none;が設定されている領域の値をPOSTしないらしい。サーバ上にはトークンが設定されているにも関わらずトークンがPOSTされないから、トークン不一致でブラックホール行きという仕組みだったのか。</p>
<p>今思いついてる解決策は、</p>
<ul>
<li>Formヘルパー自体を修正する（ライブラリ自体の修正はやりたくない）</li>
<li>$form->create(), $form->end()で取得したソースからfieldsetタグを正規表現で取り除く処理を実装する（若干難しそうだが一番意味がありそう）</li>
<li>Securityコンポーネントを使わずに独自のCSRF対策を施す（一番現実的か？）</li>
</ul>
<p>である。まぁ時間があれば2番目で行きたいが、3番目かな。原因が突き詰められたので、Securityコンポーネントを外してAUで試したところ、普通に動いてくれた。あ～、よかったぁ～。ひとまず安堵。</p>
<p>まぁセキュリティ系の課題はあるものの、処理自体は2人日で実装完了。やはりCakePHPの開発効率はかなりいいなぁと思う。簡単かつ早いかつ安心。ただ、時々超ハマる…。</p>
<p>【解決しました！】<br />
次の投稿でこの問題は解決したのでリンクはっておきます。<br />
<a href="http://319ring.net/blog/archives/1138">CakePHP:【解決】AU携帯でSecurityComponent</a></p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/1136/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/1136" />
	</item>
		<item>
		<title>CakePHP:Security Componentでハマる（最中）</title>
		<link>http://319ring.net/blog/archives/968</link>
		<comments>http://319ring.net/blog/archives/968#comments</comments>
		<pubDate>Thu, 22 Oct 2009 16:56:05 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[SecurityComponent]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=968</guid>
		<description><![CDATA[


CakePHP1.2ガイドブック




おすすめ平均 
サンプルコードが提供されず不便
入門から応用まで対応
Amazonで詳しく見る by G-Tools



Security Componentを使っている [...]]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="5">
<tbody>
<tr>
<td colspan="2"><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top">CakePHP1.2ガイドブック</a><img src="http://www.assoc-amazon.jp/e/ir?t=cyclestyle-22&amp;l=ur2&amp;o=9" border="0" alt="" width="1" height="1" /></td>
</tr>
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top"><img src="http://ecx.images-amazon.com/images/I/417XoM3%2B6sL._SL160_.jpg" border="0" alt="CakePHP1.2ガイドブック" /></a></td>
<td valign="top"><span><br />
<strong>おすすめ平均</strong> <img src="http://g-images.amazon.com/images/G/01/detail/stars-3-0.gif" alt="" /><br />
<img src="http://g-images.amazon.com/images/G/01/detail/stars-2-0.gif" alt="stars" />サンプルコードが提供されず不便<br />
<img src="http://g-images.amazon.com/images/G/01/detail/stars-4-0.gif" alt="stars" />入門から応用まで対応</p>
<p></span><span><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top">Amazonで詳しく見る</a></span><span> by <a href="http://www.goodpic.com/mt/aws/index.html">G-Tools</a></span></td>
</tr>
</tbody>
</table>
<p>Security Componentを使っているのだけれど、全くわからず…。</p>
<pre class="brush: php;">
// コントローラー
class EnqueteController extends EnqueteAppController{
  var $components = array('Security');

  function beforeFilter(){
    parent::beforeFilter();
    // CSRF&amp;リロード対策
    $this-&gt;Security-&gt;requireAuth('post_data');
    $this-&gt;Security-&gt;blackHoleCallback = '_reload_error';
  }

  /**
   * アンケートの回答を受付
   */
  function post_data(){
    // 受付処理
  }

  function admin_add(){
    // 管理者用アンケート追加処理
  }

  function _reload_error(){
    // blackHole処理
  }
}
</pre>
<p>というふうに作っているのであるが、admin_addで、データをpostすると正常な場合は登録されるのであるが、わざとエラーを起こした場合に、validates()の結果をフォームに反映するのではなく、blackHoleCallbackで設定されている_reload_errorメソッドを実行されてしまう…。</p>
<p>validates()の結果がエラーになるとblackHole行きになるの？？？</p>
<p><a href="http://d.hatena.ne.jp/slywalker/20090926/1253926623">1.2.5 SecurityComponentでハマったときに確認するポイント</a></p>
<p>を参照して、$form->create()と$form->end()を使っているのだが…。<br />
（ちなみにtableFormヘルパーを作ってるので、$tableFrom->create()とかだけど）<br />
$tableForm->submit(&#8216;送信&#8217;);も使ってるけど。</p>
<p>だいたい$this->Security->requireAuth()にメソッド名加えてないんだから、Securityコンポーネントに関係ない処理になるんじゃないの？また、もしブラックホールに吸い込まれるんなら、この場合は正常なときも吸い込まれるんじゃないの？わけわかんないっす・・・。</p>
<p>とりあえず、Securityコンポーネントを外して実装してから考えようか（ガックリ…）<br />
なんか実装がどんどん遅れていくなぁ。<br />
フレームワーク使う目的って効率上げることなのになぁ。</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/968/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/968" />
	</item>
		<item>
		<title>CakePHP:昨日のプラグインのはバグじゃなかった</title>
		<link>http://319ring.net/blog/archives/964</link>
		<comments>http://319ring.net/blog/archives/964#comments</comments>
		<pubDate>Thu, 22 Oct 2009 14:09:09 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp-plugin]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=964</guid>
		<description><![CDATA[

CakePHP1.2ガイドブック



おすすめ平均 サンプルコードが提供されず不便入門から応用まで対応
Amazonで詳しく見る by G-Tools


昨日、プラグインの$useTableが効いていないという投 [...]]]></description>
			<content:encoded><![CDATA[<table  border="0" cellpadding="5">
<tr>
<td colspan="2"><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top">CakePHP1.2ガイドブック</a><img src='http://www.assoc-amazon.jp/e/ir?t=cyclestyle-22&#038;l=ur2&#038;o=9' width='1' height='1' border='0' alt='' /></td>
</tr>
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top"><img src="http://ecx.images-amazon.com/images/I/417XoM3%2B6sL._SL160_.jpg" border="0" alt="CakePHP1.2ガイドブック" /></a></td>
<td valign="top"><font size="-1"><br /><strong>おすすめ平均</strong> <img src="http://g-images.amazon.com/images/G/01/detail/stars-3-0.gif" /><br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-2-0.gif" alt="stars" />サンプルコードが提供されず不便<br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-4-0.gif" alt="stars" />入門から応用まで対応</p>
<p><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top">Amazonで詳しく見る</a></font><font size="-2"> by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font></td>
</tr>
</table>
<p>昨日、<a href="http://319ring.net/blog/archives/959">プラグインの$useTableが効いていない</a>という投稿をしたけれど、あれはバグじゃなかった。なんてことはない。自分の勘違いだった。</p>
<pre class="brush: php;">
class Enquete extends EnqueteAppModel{
  // var $hasMany = array('EnqueteAnswerList'); // ここがミス
  var $hasMany = array('Enquete.EnqueteAnswerList'); // プラグイン名.モデル名でつなげばOK

}
</pre>
<p>$useTableの問題だけかと思っていたら、明らかにモデルを見ていないような感じの処理を行ったので（画面が真っ白になったり、モデルクラスに作成したメソッドをコールしても呼ばれなかったり…）、CakePHPの<a href="http://book.cakephp.org/ja/view/117/Plugin-Models">CookBookのプラグインモデル</a>のページを確認したらあっさりと答えが書いてあった。</p>
<p>バグ扱いしてすみません〜(T_T)</p>
<p>多分、昨日のもこれが原因だったんだろうな〜。</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/964/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/964" />
	</item>
		<item>
		<title>CakePHP:pluginのModelで$useTableが効かないバグ？</title>
		<link>http://319ring.net/blog/archives/959</link>
		<comments>http://319ring.net/blog/archives/959#comments</comments>
		<pubDate>Wed, 21 Oct 2009 17:27:52 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[cakephp-plugin]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=959</guid>
		<description><![CDATA[



CakePHP1.2ガイドブック
毎日コミュニケーションズ  2009-06-27
売り上げランキング : 51427
おすすめ平均  
Amazonで詳しく見る by G-Tools



（訂正）この記事でC [...]]]></description>
			<content:encoded><![CDATA[<table border="0" cellpadding="5">
<tbody>
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4839932468/cyclestyle-22/ref=nosim/" target="_top"><img src="http://ecx.images-amazon.com/images/I/417XoM3%2B6sL._SL160_.jpg" border="0" alt="CakePHP1.2ガイドブック" /></a></td>
<td valign="top"><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top">CakePHP1.2ガイドブック</a><img src="http://www.assoc-amazon.jp/e/ir?t=cyclestyle-22&amp;l=ur2&amp;o=9" border="0" alt="" width="1" height="1" /></p>
<p>毎日コミュニケーションズ  2009-06-27<br />
売り上げランキング : 51427<br />
おすすめ平均  <img src="http://g-images.amazon.com/images/G/01/detail/stars-3-0.gif" alt="" /></p>
<p><a href="http://www.amazon.co.jp/CakePHP1-2%E3%82%AC%E3%82%A4%E3%83%89%E3%83%96%E3%83%83%E3%82%AF-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839932468%3FSubscriptionId%3D15SMZCTB9V8NGR2TW082%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839932468" target="_top">Amazonで詳しく見る</a> by <a href="http://www.goodpic.com/mt/aws/index.html">G-Tools</a></td>
</tr>
</tbody>
</table>
<p><strong><span style="color: #ff0000;">（訂正）この記事でCakePHPのバグかと勘違いしていましたが、自分の設定ミスでした。</span><br />
詳しくは、<a href="http://319ring.net/blog/archives/964">次の日の投稿</a>を参照のこと。</strong></p>
<p>CakePHP1.2.3を使ってたのであるが、プラグインを開発していて（といっても、1.1で開発したやつを1.2に移植してるだけ）、さて動かすかという算段でアクセスしてみたら、</p>
<pre>Error: Database table enquetes for model Enquete was not found.</pre>
<p>と言われた。このエラーメッセージから、アンケートプラグインを作っていたのがわかるw<br />
それはともかく、Enqueteモデルでは、</p>
<pre class="brush: php;">
&lt;?php
class Enquete extends EnqueteAppModel
{
  var $name = 'Enquete';
  var $useTable = 'enquete'; // テーブル名はenquetesではなく、enqueteなのだ
}
?&gt;
</pre>
<p>なのである。ただ、俺は掲示板プラグインも作っているのだが、掲示板プラグインではそんな事にはなってない。掲示板プラグインとアンケートプラグインの違いは、掲示板はbbsテーブルのみだが、アンケートは、enquete, enquete_answer_list, enquete_resultという3つのテーブルを使っている事だ。hasManyとかで参照しているModelの$useTableを見てないんじゃないだろうか？</p>
<p>googleで検索してみたら、以下を発見。<br />
<a href="https://trac.cakephp.org/ticket/4131">https://trac.cakephp.org/ticket/4131</a><br />
チケット出てるやん。でもcloseされてるみたい。でもその後に、再現するからもう一度テストしろっていう書き込みが見られるが、スルーされてるっぽい。1.2 RC1の頃のチケットだからなぁ…。</p>
<p>CakePHP 1.2.5が出てたのでひょっとしたら直ってるかな〜と思ってcakeディレクトリを上書きしてみたけれど、結果は変わらず。直ってないやん。</p>
<p>なんか面倒だったので、テーブルを複数系にして対応してしまった。<br />
でも、enquete_answer_listsって、リストなのに複数形ってオイ！！と自分で突っ込みたくなる。正直気持ち悪い。まあとりあえずってことで。</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/959/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/959" />
	</item>
		<item>
		<title>CakePHP: WindowsでのXAMPPが異常に遅い</title>
		<link>http://319ring.net/blog/archives/807</link>
		<comments>http://319ring.net/blog/archives/807#comments</comments>
		<pubDate>Sun, 26 Jul 2009 14:52:04 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=807</guid>
		<description><![CDATA[CakePHP1.2で、ヒルクライムしようぜの開発をしているのだけど、現在停滞中。
理由は、CakeをデバッグモードにしているとXAMPPが異常に遅いから（やる気を削がれた）。
XAMPPが遅い理由は、わからない…。
M [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP1.2で、ヒルクライムしようぜの開発をしているのだけど、現在停滞中。<br />
理由は、CakeをデバッグモードにしているとXAMPPが異常に遅いから（やる気を削がれた）。<br />
XAMPPが遅い理由は、わからない…。</p>
<p>MacBookにMAMPをインストールして、こちらで全く同じソースを走らせたら2秒で表示されたのに対し、Windows環境のXAMPPなら、22秒。もう遅すぎ…。1ページ修正して様子を見るのにあまりに時間がかかるため、あきらめた。解決策を探してみたものの、見つからないし。</p>
<p>試しに、Cakeをダウンロードしたままの状態でXAMPPで走らせてみたら、それでも3秒かかった。まっさらな状態で3秒かかるって。</p>
<p>まあ考えられるのは、Apacheの設定とかなんだろうと思う。Cakeのソースが同じなんだから。とりあえず、ヒルクライムしようぜの開発はMacBook側で行うことにして、ソースを移動させた。画面の大きさが小さいので開発しにくいと思ったので、以前使っていたUXGAのディスプレイにつないでデュアルディスプレイにした。<br />
前に使っていたやつはヤフオクで買ったやつでもう古いためか、久々に電源を入れたら画面が黄色がかっててショックだった。MacBookの画面がきれいなだけに余計際立ってしまった。ソースを書くためのディスプレイだから、問題ないけど。</p>
<p>WindowsのXAMPPで遅いのを解決する方法をご存知の方がいらっしゃったら、ぜひ教えてください！</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/807/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/807" />
	</item>
		<item>
		<title>CakePHP1.2:cleanUpFieldsって無くなってたのか…。</title>
		<link>http://319ring.net/blog/archives/790</link>
		<comments>http://319ring.net/blog/archives/790#comments</comments>
		<pubDate>Sun, 12 Jul 2009 15:35:22 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=790</guid>
		<description><![CDATA[

CakePHP ポケットリファレンス (Pocket Reference)



株式会社ブルーオーシャン 岡田 佳典
技術評論社  2008-06-18売り上げランキング : 75872
おすすめ平均  これだけで [...]]]></description>
			<content:encoded><![CDATA[<table  border="0" cellpadding="5">
<tr>
<td colspan="2"><a href="http://www.amazon.co.jp/CakePHP-%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-Pocket-Reference-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%83%96%E3%83%AB%E3%83%BC%E3%82%AA%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%B3/dp/4774135038%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774135038" target="_top">CakePHP ポケットリファレンス (Pocket Reference)</a><img src='http://www.assoc-amazon.jp/e/ir?t=cyclestyle-22&#038;l=ur2&#038;o=9' width='1' height='1' border='0' alt='' /></td>
</tr>
<tr>
<td valign="top"><a href="http://www.amazon.co.jp/CakePHP-%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-Pocket-Reference-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%83%96%E3%83%AB%E3%83%BC%E3%82%AA%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%B3/dp/4774135038%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774135038" target="_top"><img src="http://ecx.images-amazon.com/images/I/51wQ5izYhPL._SL160_.jpg" border="0" alt="CakePHP ポケットリファレンス (Pocket Reference)" /></a></td>
<td valign="top"><font size="-1">株式会社ブルーオーシャン 岡田 佳典</p>
<p>技術評論社  2008-06-18<br />売り上げランキング : 75872</p>
<p><strong>おすすめ平均  </strong><img src="http://g-images.amazon.com/images/G/01/detail/stars-4-5.gif" alt="star" /><br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="star" />これだけで作れそうです。<br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-5-0.gif" alt="star" />現状のCakePHPリファレンスでは最良<br /><img src="http://g-images.amazon.com/images/G/01/detail/stars-4-0.gif" alt="star" />サンプルコードがもう少し丁寧であれば５つ星</p>
<p><a href="http://www.amazon.co.jp/CakePHP-%E3%83%9D%E3%82%B1%E3%83%83%E3%83%88%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9-Pocket-Reference-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%83%96%E3%83%AB%E3%83%BC%E3%82%AA%E3%83%BC%E3%82%B7%E3%83%A3%E3%83%B3/dp/4774135038%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4774135038" target="_top">Amazonで詳しく見る</a></font><font size="-2"> by <a href="http://www.goodpic.com/mt/aws/index.html" >G-Tools</a></font></td>
</tr>
</table>
<p>Cake1.1のプログラムをCake1.2に移植中ってずっと言っていることなんだけど、<br />
こいつは本当に時間がかかるかも…。<br />
今日は$controller->cleanUpFields()がないというエラーメッセージが出てきて、なんでかな～と思ってネットで調べてもなかなか答えに行き当たらず、CakePHPポケットリファレンスで見て、無くなっていることに気付いた。Model::deconstructに変更になったらしいっすわ。そうですか。</p>
<p>まあね、Model側に持たせておけば、beforeValidateのときに自動的に合体させるようにしておけば、漏れがないしね～。コントローラから分離するにはそちらのほうがいいですわ。</p>
<p>修正箇所が多すぎて、心が折れそうになるときもあるけど、じっくりと取り組みます。<br />
それにしても、CakePHPポケットリファレンス、情報は結構古くなってきたけど、まだ使えるなぁ。<br />
このポケットリファレンスの最新版が出たら、即買いするんだけど。</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/790/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/790" />
	</item>
		<item>
		<title>CakePHP:schema.phpのindexesの更新でバグ</title>
		<link>http://319ring.net/blog/archives/757</link>
		<comments>http://319ring.net/blog/archives/757#comments</comments>
		<pubDate>Tue, 23 Jun 2009 02:45:28 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=757</guid>
		<description><![CDATA[CakePHP1.2の話。
データベースのテーブル定義を更新しようと、schema.phpを編集してcakeコマンドでスキーマの更新をかけようとしたら、失敗した。
Can't DROP 'indexes'; check  [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP1.2の話。</p>
<p>データベースのテーブル定義を更新しようと、schema.phpを編集してcakeコマンドでスキーマの更新をかけようとしたら、失敗した。</p>
<pre>Can't DROP 'indexes'; check that column/key exists</pre>
<p>indexesがDROPできないから更新できないよ～！ということらしい。<br />
Googleで検索してみたところ、Google groupのcakephpのところに答えがあった。</p>
<p><a href="http://groups.google.co.jp/group/tickets-cakephp/browse_thread/thread/84cbdf3093415923">http://groups.google.co.jp/group/tickets-cakephp/browse_thread/thread/84cbdf3093415923</a></p>
<p>ただ、cakeのコアを編集することになるので、<br />
Cakeのバージョンがアップしたときに対応されてないと<br />
またバグになってしまうので注意が必要かと思う。</p>
<pre class="brush: php;">
// CORE/cake/libs/model/schema.phpの430行目
$tables[$table]['drop']['indexes'] = $diff['drop'];
$tables[$table]['add']['indexes'] = $diff['add'];
// を下記のように編集する

// $tables[$table]['drop']['indexes'] = $diff['drop'];
// $tables[$table]['add']['indexes'] = $diff['add'];
if(!empty($diff['drop'])) {
        $tables[$table]['drop']['indexes'] = $diff['drop'];
}
if(!empty($diff['add'])) {
        $tables[$table]['add']['indexes'] = $diff['add'];
}
</pre>
<p>この修正後、スキーマの更新を再度行ったら、indexesが正常に更新されました。<br />
よかったよかった。</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/757/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/757" />
	</item>
		<item>
		<title>CakePHP: xdebugインストール</title>
		<link>http://319ring.net/blog/archives/708</link>
		<comments>http://319ring.net/blog/archives/708#comments</comments>
		<pubDate>Thu, 04 Jun 2009 02:06:34 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=708</guid>
		<description><![CDATA[CakePHPのユニットテストを使ってみようと思って、
xdebugをインストールしたのでメモ。
インストール自体は、peclで簡単。

pecl install xdebug

ただ、上記の方法でインストールしたら、x [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHPのユニットテストを使ってみようと思って、<br />
xdebugをインストールしたのでメモ。<br />
インストール自体は、peclで簡単。</p>
<pre class="brush: bash;">
pecl install xdebug
</pre>
<p>ただ、上記の方法でインストールしたら、xdebug-2.0.4がインストールされた。<br />
2.0.4だと、コードカバレッジの画面を表示したら真っ白になってしまった。</p>
<p>以下に、xdebug-2.0.3で動かなくて、xdebug-2.0.0にしたら動いたとあった。<br />
<a href="http://taichino.com/?p=123">http://taichino.com/?p=123</a></p>
<p>なので、xdebug-2.0.0をインストールしてみる。</p>
<pre class="brush: bash;">
pecl uninstall xdebug
pecl install xdebug-2.0.0
</pre>
<p>これで、ちゃんとコードカバレッジが動いてくれました。<br />
よし、ユニットテストの勉強をしよう！！</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/708/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
	<xhtml:link rel="alternate" media="handheld" type="text/html" href="http://319ring.net/blog/archives/708" />
	</item>
	</channel>
</rss>
