<?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/"
	>

<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>Tue, 09 Mar 2010 17:39:15 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<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(&#8217;送信&#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>
		</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>
		</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>
		</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>
		</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>
		</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>
		</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>
		</item>
		<item>
		<title>Cakephp1.2: setメソッドを使うときの注意</title>
		<link>http://319ring.net/blog/archives/648</link>
		<comments>http://319ring.net/blog/archives/648#comments</comments>
		<pubDate>Thu, 14 May 2009 05:34:18 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=648</guid>
		<description><![CDATA[CakePHPでハマッた件のメモ。

// コントローラー
$hoge_fuga = 'test';
$this-&#62;set(compact('hoge_fuga'));

// ここからビューとして・・・
&#60; [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHPでハマッた件のメモ。</p>
<pre class="brush: php;">
// コントローラー
$hoge_fuga = 'test';
$this-&gt;set(compact('hoge_fuga'));

// ここからビューとして・・・
&lt;?php e($hoge_fuga); // testと表示されると思ったのに、表示されない！ ?&gt;
</pre>
<p>15分くらい悩んだ…。変数名にアンダーバーつける前まではちゃんと動いていたし、アンダーバーを付けたらダメというルールもなかった気がする（ずっと使ってたし。）<br />
ここでミソなのが、compact関数です。<br />
compact関数を使うと、アンダースコアがキャメルケースに変更されてしまうらしいです。</p>
<p>参照情報：<br />
<a href="http://www.rainorshine.asia/2008/08/10/post602.html">http://www.rainorshine.asia/2008/08/10/post602.html</a></p>
<p>ですので、アンダースコアの場合、compact関数を使わずにsetしましょう。</p>
<pre class="brush: php;">
// コントローラー
$hoge_fuga = 'test';
$this-&gt;set('hoge_fuga', $hoge_fuga);

// ここからビューとして・・・
&lt;?php e($hoge_fuga); // testと表示されました！ ?&gt;
</pre>
<p>以上です。<br />
て、久々の更新がメモかよっ！</p>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/648/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHPの新しい本が出るらしい</title>
		<link>http://319ring.net/blog/archives/584</link>
		<comments>http://319ring.net/blog/archives/584#comments</comments>
		<pubDate>Thu, 12 Mar 2009 02:34:06 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[本]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=584</guid>
		<description><![CDATA[CakePHPの新しい本が出るらしい。著者が、CakePHPガイドブックの方なので安心。それと、個人的に楽しみなのは、Webアプリケーションテスト手法を書かれた岸田さんも著者におられること。CakePHPのテスト駆動開発 [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHPの新しい本が出るらしい。著者が、CakePHPガイドブックの方なので安心。それと、個人的に楽しみなのは、Webアプリケーションテスト手法を書かれた岸田さんも著者におられること。CakePHPのテスト駆動開発方法が書かれているっぽいので、これは期待大！</p>
<p>あと、ケータイ対応とかについてもあるらしい。早速、アマゾンで予約しました！！</p>
<p>最近はCakePHPやれてないけれど、CakePHP1.2でヒルクライムしようぜ！をリプレースするのが3月中の目標。ほぼスタティックなサイトを作るにしても、CakePHPのほうがケータイ対応とかが理解できながら作れるから、DB使わないようなサイトでもCakePHPでやろうかな～とか。</p>
<table border="0" cellpadding="5">
<tbody>
<tr>
<td colspan="2"><a href="http://www.amazon.co.jp/CakePHP%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839930651%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839930651" target="_top">CakePHPによる実践Webアプリケーション開発</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/CakePHP%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839930651%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839930651" target="_top"><img src="http://ecx.images-amazon.com/images/I/51bJ7x9fIJL._SL160_.jpg" border="0" alt="CakePHPによる実践Webアプリケーション開発" /></a></td>
<td valign="top"><span>安藤 祐介</span></p>
<p><span>毎日コミュニケーションズ  2009-03-26<br />
売り上げランキング : 798</span></p>
<p><span><a href="http://www.amazon.co.jp/CakePHP%E3%81%AB%E3%82%88%E3%82%8B%E5%AE%9F%E8%B7%B5Web%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E9%96%8B%E7%99%BA-%E5%AE%89%E8%97%A4-%E7%A5%90%E4%BB%8B/dp/4839930651%3FSubscriptionId%3D0G91FPYVW6ZGWBH4Y9G2%26tag%3Dcyclestyle-22%26linkCode%3Dxm2%26camp%3D2025%26creative%3D165953%26creativeASIN%3D4839930651" 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>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/584/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CakePHP1.2 Model::validates($data)の罠</title>
		<link>http://319ring.net/blog/archives/562</link>
		<comments>http://319ring.net/blog/archives/562#comments</comments>
		<pubDate>Tue, 03 Feb 2009 11:25:43 +0000</pubDate>
		<dc:creator>パトラッシュ</dc:creator>
				<category><![CDATA[CakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[validates]]></category>

		<guid isPermaLink="false">http://319ring.net/blog/?p=562</guid>
		<description><![CDATA[CakePHP1.2の最新版である、1.2.1.8004にて、Model::validatesをオーバーライドして、モデル毎に独自のバリデーションを持たせていたのだが、いざ実験を行ってみると、全くバリデーションが効いてい [...]]]></description>
			<content:encoded><![CDATA[<p>CakePHP1.2の最新版である、1.2.1.8004にて、Model::validatesをオーバーライドして、モデル毎に独自のバリデーションを持たせていたのだが、いざ実験を行ってみると、全くバリデーションが効いていない。</p>
<pre class="brush: php;">&lt;?php
    // コントローラー
    if ($this-&gt;Model-&gt;validates($this-&gt;data)) {
        // 検証OK
    } else {
        // 検証NG
    }
?&gt;</pre>
<p>上のように書いて、明らかにエラーになるような値を入力して渡しても、なぜかvalidatesをすり抜けてくる。</p>
<p>ちなみにモデル側は、</p>
<pre class="brush: php;">&lt;?php
    // モデル
    function validates($data = array()){
        if(empty($data)){
            $data = $this-&gt;data;
        }
        parent::validates($data);
        // 独自のバリデーション

        if(count($this-&gt;validationErrors) &gt; 0){
            return false;
        }else{
            return true;
        }
    }
?&gt;</pre>
<p>である。独自に定義したバリデーション自体は通っていた。問題は、フレームワークが最初から持っているバリデーションを通っていないということだ。<br />
うーむ、俺はCakePHP1.1のときに、ずっと上記のような書き方をしていたので、全く理由がわからない。<br />
とりあえずググると、こんな記述を発見。</p>
<p>注意：英語のサイトです。<br />
<a href="http://lemoncake.wordpress.com/2007/06/26/validation-gotcha-in-cakephp-12/">http://lemoncake.wordpress.com/2007/06/26/validation-gotcha-in-cakephp-12/</a></p>
<p>どうも、$this->Model->validates($this->data)のように引数を渡したのでは、ちゃんと動いてくれないっぽい。確かに、CakePHPポケットリファレンスでも、引数を渡すのは非推奨と書いてあった。validatesをする事前に、setをする必要があるらしい。</p>
<pre class="brush: php;">&lt;?php
    // コントローラー
    $this-&gt;Model-&gt;set($this-&gt;data); // 事前にsetしておく
    if ($this-&gt;Model-&gt;validates()) {
        // 検証OK
    } else {
        // 検証NG
    }
?&gt;</pre>
<p>こうしたら、フレームワークが最初から持っているバリデーション機能を通ってくれた。<br />
CakePHP1.1と1.2で、こんな違いもあるのだな～。それにしても、こんなことに2時間くらい悩んでしまった…。相当ストレスがたまってしまったが、原因がわかったし、解決できたから、報われたっす。</p>
<p>■追記<br />
$this->Model->create($this->data)でもよいという記事があった。<br />
参考情報を以下に載せておく。</p>
<ul>
<li><a href="http://manjiro.net/2007/11/29/cakephp12%e3%81%a7validation%e9%96%a2%e4%bf%82%e3%82%92%e8%a7%a6%e3%81%a3%e3%81%a6%e3%81%bf%e3%82%8b%e3%80%82/">デジタル料理人 &#8211; Webプログラマコンサル屋 &#8211; CakePHP1.2でValidation関係を触ってみる。</a></li>
<li><a href="http://tech.li-pton.com/php/validation_trap.html">WEBツール研究所 CakePHP1.2バリデーションの罠</a></li>
</ul>
<pre class="brush: php;">&lt;?php
    // コントローラー
    // 新規作成の場合は以下でもよい
    if ($this-&gt;Model-&gt;create($this-&gt;data) &amp;&amp; $this-&gt;Model-&gt;validates()) {
        // 検証OK
    } else {
        // 検証NG
    }
?&gt;</pre>
]]></content:encoded>
			<wfw:commentRss>http://319ring.net/blog/archives/562/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
