<?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>JiroBlog &#187; cakePHP</title>
	<atom:link href="http://www.jirosoft.com/wordpress/tag/cakephp/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jirosoft.com/wordpress</link>
	<description>ただのオヤジプログラマのブログ</description>
	<lastBuildDate>Thu, 22 Jul 2010 13:13:32 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=abc</generator>
	<language>ja</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>cakePHP1.3再入門#4 Ktaiライブラリと振分け</title>
		<link>http://www.jirosoft.com/wordpress/2010-06-02-195/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-06-02-195/#comments</comments>
		<pubDate>Wed, 02 Jun 2010 08:46:43 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=195</guid>
		<description><![CDATA[pearのNet_UserAgent_Mobileを使用して、携帯とPCのアクセスを振り分ける目論見でしたが、携帯用のページ作成には振り分けだけでなくいろいろな機能が必要だと勉強すればするほど理解しました。(某辞任表明首 [...]]]></description>
			<content:encoded><![CDATA[<p>pearのNet_UserAgent_Mobileを使用して、携帯とPCのアクセスを振り分ける目論見でしたが、携帯用のページ作成には振り分けだけでなくいろいろな機能が必要だと勉強すればするほど理解しました。(某辞任表明首相風)<br />
そういうわけでcakePHPにも利用しやすいKtaiライブラリの導入を決めました。</p>
<p><a href="http://blog.ecworks.jp/ktai">ECWorks Blog</a>からダウンロードできます。</p>
<p>インストールと言うか、ダウンロードしたファイルを解凍してcakePHPの対象フォルダにコピーするだけです。<br />
テンプのreadmeをよく読めば設置は難しくないですね。</p>
<p>ただ、今回は携帯からのアクセスとPCからのアクセスで異なるViewを表示したいことと、アドレスを分けたくなかったので<br />
ちょっと工夫が必要でした。</p>
<p>/app/controllersにコピーしたAppControllerの中に必要な設定をコピーします。</p>
<p>ここで、コントローラ内にbeforeRender()を追加します。</p>
<pre class="brush: php;">
    function beforeRender() {
    parent::beforeRender();

    if (
        in_array('Ktai', $this-&gt;components) &amp;&amp;
        $this-&gt;Ktai-&gt;is_ktai()
        ) {
            // Viewのパスへの書き換え
            $view_paths = App::path('views');
            $result = array_search(ROOT.DS.APP_DIR.DS.'views'.DS, $view_paths);
            if ($result !== false) {
                $view_paths[$result] = ROOT.DS.APP_DIR.DS.'views_mobile'.DS;
            }
            App::build(array('views' =&gt; $view_paths), true);
        }
    }
</pre>
<p>同じクラス内で</p>
<pre class="brush: php;">
    var $components = array('Ktai');
</pre>
<p>としているのでif文のコンポーネンツ判断はいらないですね。<br />
参考にしたサイトの記述ではここのif文がarray_key_existsになってて動かなかったのですが<br />
$componentsは[0]->&#8221;Ktai&#8221;のようになっていてKeyサーチではtrueになりませんでした。</p>
<p>ここでちょっとはまりました。in_arrayならうまく動作しました。</p>
<p>この記述でPCからなら/app/views/以下のレイアウトとテンプレートを携帯からなら<br />
/app/views_mobile/を見に行ってくれます。</p>
<p>/app以下のAppControllerを変更しただけなので、トップページの場合はこのAppControllerを継承した<br />
PagesControllerを/app/controllers/に作成します。</p>
<p>あとは/app/views_mobileとそれ以下の必要なフォルダを作成してdefault.ctp home.ctpなどを携帯専用として作成すればOKです。</p>
<p>とりあえずiMode HTMLシュミレータではうまく動作しました。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-06-02-195/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP1.3再入門#3 ドキュメントルートとトップページ</title>
		<link>http://www.jirosoft.com/wordpress/2010-06-01-185/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-06-01-185/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 12:43:35 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=185</guid>
		<description><![CDATA[さてさて、トップページを表示させることは出来たのですが、基本的にトップページが他のページと少し違うレイアウトだったり、ただのインデックスページってこともありますから静的なページを表示することもありえます。
MVCでデータ [...]]]></description>
			<content:encoded><![CDATA[<p>さてさて、トップページを表示させることは出来たのですが、基本的にトップページが他のページと少し違うレイアウトだったり、ただのインデックスページってこともありますから静的なページを表示することもありえます。</p>
<p>MVCでデータベースに紐づいたページに必ずなるとは限りませんよね。一部新しいお知らせとかが入るくらいで。<br />
今回構築しているシステムでは、トップページはPC用はシステムの案内としようか、それとも直接サービスが使えるようにするか迷ってます。そんな感じなので、まずルーティングについて再確認しておこうと思います。</p>
<p>最初の読込み</p>
<p>http://localhost/ktai/というurlでアクセスしたら、/index.phpをまず読み込みますが、ここに他のソースが読込まれます。</p>
<pre class="brush: php;">
	require APP_DIR . DS . WEBROOT_DIR . DS . 'index.php';
</pre>
<p>appディレクトリのwebrootディレクトリですから、/app/webroot/index.phpを読み込みます。<br />
このなかで/cake/bootstrap.phpをインクルードしている。</p>
<p>エントリポイントについては<a href="http://bobch.in/cakephp/doku.php/dispatcher">ここ</a>の説明がよくわかる。</p>
<p>このbootstrap.phpからConfigure クラスをインスタンス化している。このときに/app/config/core.phpと/app/config/bootstrap.phpが呼ばれている。<br />
ああ、おんなじ名前が多くて混乱する。<br />
そのあと/cake/dispacher.phpを読んでいる。ここでbaseurlなどを決めているようだ。<br />
これに/app/config/route.phpが絡んでいる。</p>
<pre class="brush: php;">
	Router::connect('/', array('controller' =&gt; 'pages', 'action' =&gt; 'display', 'home'));
</pre>
<p>pagesコントローラのディスプレイactionでhomeを呼べとなっている。<br />
やっと、ここまで来た。</p>
<p>これはデフォルトでは/cake/libs/controller/pages_controller.phpのなかのdisplayメソッドが使われる。<br />
このように固定されていると中々不自由です。</p>
<p>/app/config/route.phpを書き換えてcontrollerやaction などを書き換える方法もあります。<br />
また呼ばれるテンプレートのhome.ctpの中でレイアウト変更も出来ますね。</p>
<p>home.ctp</p>
<pre class="brush: php;">
&lt;?php
    $this-&gt;layout = &quot;main&quot;;
    $this-&gt;pageTitle = &quot;携帯用タイトル&quot;;
?&gt;
</pre>
<p>/app/views/layoutsにmain.ctpを作っておけばOKです。home.ctpでレイアウトだけ指定して何も書かなければmain.ctpの静的なページになりますね。</p>
<p>認証などでbeforeFilterを加えたりする場合は、/cake/libsにあるpages_controller.phpを<br />
/app/controller/にコピーして書き換えると自由に出来ます。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-06-01-185/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP1.3再入門#2 pear</title>
		<link>http://www.jirosoft.com/wordpress/2010-06-01-178/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-06-01-178/#comments</comments>
		<pubDate>Tue, 01 Jun 2010 08:08:49 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[pear]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=178</guid>
		<description><![CDATA[前回までで、とりあえずトップページが表示されました。
このあとMVCにしたがってデータベースとその表示、更新などのページを作っていくわけですが、今回はちょっと横道にそれてPHPの便利な道具としてpearを導入することにし [...]]]></description>
			<content:encoded><![CDATA[<p>前回までで、とりあえずトップページが表示されました。<br />
このあとMVCにしたがってデータベースとその表示、更新などのページを作っていくわけですが、今回はちょっと横道にそれてPHPの便利な道具としてpearを導入することにしました。</p>
<p>恥ずかしい話ですが実はpearって何。それっておいしいの?状態でした。</p>
<p>携帯用のwebを作成するためにアクセスしてきた対象が携帯かPCかを振り分ける方法を探していてnet_userAgent_mobileというライブラリを見つけまして、どうもこれがpearというもののひとつであると言うことがわかりました。</p>
<p>pearはPHPの機能を拡張するライブラリということまでわかりました。ww</p>
<p>さて、ローカルのテスト環境にはXAMPPを導入した際にpearは入っているようです。<br />
その環境でNet_userAgent_mobileのインストールに取り掛かります。<br />
pearと言うコマンドでインストールできると言うことまでわかったのでコマンドプロンプトを開いて</p>
<p>C:\xampp/phpに移動します。(xamppのインストール方法によって変わります。)<br />
このディレクトリにpearコマンドがありますので<br />
pear install net_useragent_mobile<br />
とタイプすればダウンロードとインストールを勝手にやってくれます。</p>
<p>これでテストできそうなので以下のようなテストphpを書いてみました。<br />
mobiletest.php</p>
<pre class="brush: php;">
&lt;?php
require_once('Net/UserAgent/Mobile.php'); 

$agent = Net_UserAgent_Mobile::singleton(); 

if($agent-&gt;isDoCoMo()){
    echo &quot;docomo&quot; . &quot;&lt;br&gt;&quot;;
    echo $agent-&gt;getModel().&quot;&lt;br&gt;&quot;;
    echo $agent-&gt;getSerialNumber().&quot;&lt;br&gt;&quot;;
}elseif($agent-&gt;isSoftbank()){
  echo &quot;Softbank&quot;;
}elseif($agent-&gt;isEZweb()){
  echo &quot;au&quot;;
}elseif($agent-&gt;isWillcom()){
  echo &quot;WILLCOM&quot;;
}else{
  echo &quot;PC&quot;;
}
?&gt;
</pre>
<p>この状態でxamppのapacheを起動させてブラウザからhttp://localhost/mobiletest.phpを呼び出すと<br />
「PC」と表示されました。無事動いているようです。次にiモード HTMLシュミレータ2を起動して同様のURLにアクセスすると<br />
<a href="http://www.jirosoft.com/wordpress/wp-content/uploads/2010/06/cakephp1_3_03.jpg"><img src="http://www.jirosoft.com/wordpress/wp-content/uploads/2010/06/cakephp1_3_03-198x300.jpg" alt="iモード　HTML シュミレータ" title="cakephp1_3_03" width="198" height="300" class="alignleft size-medium wp-image-181" /></a></p>
<p>このように表示されました。ユーザーエージェントなどの判別もうまくいっているようです。<br />
ただシリアル番号は取れていないようですが、この部分は後で要検討です。</p>
<p>auやsoftbankもシュミレータでテストするべきですが、とりあえず実機でテストしてみたいのでレンタルサーバーにuploadする方法を検討します。</p>
<p>今回はお名前ドットコムのSD共用サーバーを借りています。<br />
説明を見るとpearはインストールされていないようなので手動でセットしないといけません。</p>
<p>いろいろ調べてみるとpear.phpとNet_UserAgent_Mobileの必要なファイルだけアップロードしても出来るようですが他の機能も必要になりそうなのですべてあげておくことにします。</p>
<p>ブラウザからインストールする方法としてgo-pear.phpと言うソースをアップロードしてインストールする方法がありましたので<br />
テストしてみましたがどうもうまくいきません?</p>
<p>SD共用サーバーはSSHやTelnetが使えないのでFTPに頼るわけですが、アップロード先がドメインを複数含むので以下のようになっています。<br />
analyze<br />
backup<br />
files<br />
hoge.com<br />
hogehoge.com<br />
ブラウザからアクセスできるのはhoge.comとhogehoge.com以下ですのでpearはfiles以下のブラウザでアクセスできない領域におくことにします。<br />
hoge.comの直下にgo-pear.phpをアップロードしてブラウザでhttp://hoge.com/go-pear.phpを叩くとインストール画面が出てきます。<br />
(go-pear.phpはぐぐるとソースが入手できます。)<br />
ここでInstallation prefixのところに何を入れるかで悩みました。<br />
/home/アカウント名/pearなどと解説してるところもあるのですが、SD共用サーバーではどうすればよいか。</p>
<p>仕方ないのでpearをインストールする前に先ほどのmobiletest.phpをアップしてエラー吐かせて見ました。<br />
すると<br />
/export/sdxx/www/jp/r/e/gmoserver/n/m/サーバーアカウントID/hoge.com/mobiletest.php<br />
にエラーがあるとでました。(一部伏字にしてますので、ご自分の環境で確認してください)<br />
これで参照位置がわかりました。ただしgo-pearでインストールする際には/files/hoge/以下にしようと思うのでパーミッションを777にしておかないといけないようです。</p>
<p>面倒になってきたのでWindows環境でインストールしているディレクトリを/files/hoge/PEARにすべてアップロードしました。<br />
さて、pearへのパスが通っていないので、このままでは先ほどのmobiletest.phpは動きません。<br />
include_pathと言う奴を指定しなくちゃいけません。<br />
.htaccessでパスを通す方法が書いてあったので設置して<br />
    php_value include_path &#8220;.:/export/sdxx/www/jp/r/e/gmoserver/m/n/サーバーアカウントID/files/hoge/PEAR&#8221;<br />
としてみましたが、動きません。.htaccessでは動かないこともあるとのこと。サーバー側の仕様でしょうね。</p>
<p>仕方ないのでmobiletest.phpに一行加えました。</p>
<pre class="brush: php;">
    ini_set('include_path', &quot;.://export/sdxx/www/jp/r/e/gmoserver/m/n/サーバーアカウントID/files/hoge/PEAR&quot;);
</pre>
<p>これをrequire_onceの前に加えたら、なんとか無事動作しました。</p>
<p>結構面倒でしたが、これでpear持つ変えるようになりました。</p>
<p>つぎは振り分けを行うためにcakePHPのルーティングについて、勉強しなおします。<br />
これも結構ややこしやーーーー。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-06-01-178/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP1.3再入門#1</title>
		<link>http://www.jirosoft.com/wordpress/2010-05-31-165/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-05-31-165/#comments</comments>
		<pubDate>Mon, 31 May 2010 08:36:57 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=165</guid>
		<description><![CDATA[しばらくcakePHPから遠ざかっていたらVar1.3安定版が出ていました。
新規に1.3をインストールして、再度初心に帰って再入門します。ということで、いつもの覚書と言うかメモです。
ダウンロード
cakePHP日本語 [...]]]></description>
			<content:encoded><![CDATA[<p>しばらくcakePHPから遠ざかっていたらVar1.3安定版が出ていました。</p>
<p>新規に1.3をインストールして、再度初心に帰って再入門します。ということで、いつもの覚書と言うかメモです。</p>
<p>ダウンロード<br />
<a href="http://cakephp.jp/">cakePHP日本語サイト</a>のトップに1.3.0 stableのDOWNLOADがあります。<br />
cakephp-cakephp1x-1.3.0-0-g1c06478.zipと言うファイルを落としてきて解凍チン!!。</p>
<p>テスト環境はxamppを使っているのでxampp/htdocs/以下に今回テスト用のktaiというディレクトリを作って中身をコピー。</p>
<p>とりあえず、このままfirefoxでhttp://localhost/ktai/を打ち込む。<br />
まずエラーページが表示される。<br />
<a href="http://www.jirosoft.com/wordpress/wp-content/uploads/2010/05/cakephp1_3_01.jpg"><img class="alignleft size-medium wp-image-166" title="cakephp1_3_01" src="http://www.jirosoft.com/wordpress/wp-content/uploads/2010/05/cakephp1_3_01-300x201.jpg" alt="cakePHP初期画面" width="300" height="201" /></a></p>
<p>まずは、お決まりのエラーですが、ちょっと新しいのが出ているのかな。<br />
&#8216;Security.cipherSeed&#8217;って無かったような気がする。</p>
<p>背景が黄色の部分がエラーです。<br />
３箇所出ています。<br />
最初の二つについては/app/config/core.phpを編集しないといけません。</p>
<p>「Security.salt」の定数がデフォルトだとみんなに知られていますから変更しろとのこと。</p>
<p>198行目の</p>
<pre class="brush: php;">
Configure::write('Security.salt', 'DYhG93b0qyJfIxfs2guVoUubWwvniR2G0FgaC9mi');
</pre>
<p>を書き換えます。<br />
DYhG93b0q&#8230;の部分を適当に書き換えます。この値はハッシュの作成に使われます。</p>
<p>CookBookの1.3を見ると CIPHER_SEEDがSecurity.cipherSeedに書き換えられたみたい。なんのことやらw<br />
どうも乱数発生時の種みたいですね。これも適当な数字に書き換えましょう。</p>
<p>203行目の</p>
<pre class="brush: php;">
Configure::write('Security.cipherSeed', '76859309657453542496749683645');
</pre>
<p>これでさっきの画面をリロードしたら、上の二つはグリーンになります。</p>
<p>3番目のメッセージはデータベースに関する設定をしろってことで、config/database.php.default　を config/database.phpにリネームして中身をいじくることになります。</p>
<pre class="brush: php;">
class DATABASE_CONFIG {

	var $default = array(
		'driver' =&gt; 'mysql',
		'persistent' =&gt; false,
		'host' =&gt; 'localhost',
		'login' =&gt; 'user',
		'password' =&gt; 'password',
		'database' =&gt; 'database_name',
		'prefix' =&gt; '',
	);

	var $test = array(
		'driver' =&gt; 'mysql',
		'persistent' =&gt; false,
		'host' =&gt; 'localhost',
		'login' =&gt; 'user',
		'password' =&gt; 'password',
		'database' =&gt; 'test_database_name',
		'prefix' =&gt; '',
	);
}
</pre>
<p>$defaultが普通の設定　$testはテストの時なんかに別のDB使うときの設定って認識でいいと思います。<br />
複数のDBなんか同時に使うことはないと思うけど。</p>
<p>ちなみにモデルの定義の中で</p>
<pre class="brush: php;">
$this-&gt;useDbConfig = 'test';
</pre>
<p>とすると$testの定義を使ってくれるので、色々作っておいてモデルごとに使い分けることも出来るみたい。<br />
Bakeとかでも自動判別するんだろうなあ。</p>
<p>[設定]<br />
driverはMySQLなのでそのまま、persistentは持続的データベース接続ってことらしい。<br />
<a href="http://php.net/manual/ja/features.persistent-connections.php">ここ</a>に説明が書いてるけど、よく理解して使わないとちょっと怖そう。デフォルトどおりfalseにしておく。<br />
hostはlocalhostのまま、本番動作時はレンタルサーバーとかの指定によって書き換えよう。<br />
loginはMySQLのログインユーザー名、passwordはそのパスワード、databaseは使用するデータベース名。<br />
prefixは接頭語だけど、いらないので省略。</p>
<p>こんな感じでdatabase.phpを書き換えたらOKかな。</p>
<p><a href="http://www.jirosoft.com/wordpress/wp-content/uploads/2010/05/cakephp1_3_02.jpg"><img class="alignleft size-medium wp-image-176" title="cakephp1_3_02" src="http://www.jirosoft.com/wordpress/wp-content/uploads/2010/05/cakephp1_3_02-300x195.jpg" alt="設定とりあえずOK" width="300" height="195" /></a></p>
<p>とりあえず初期設定の一部が済みました。使用するデータベースはphpMyAdminとかで先に作成しておいたほうがいいですね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-05-31-165/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>WindowsMobileなどなど</title>
		<link>http://www.jirosoft.com/wordpress/2010-05-13-153/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-05-13-153/#comments</comments>
		<pubDate>Wed, 12 May 2010 20:03:53 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[ブログ]]></category>
		<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[VisualBasic]]></category>
		<category><![CDATA[WindowsMobile]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=153</guid>
		<description><![CDATA[非常に長いことご無沙汰でした。４月に超短納期の仕事が入りまして、ばたばたしておりました。
それが片付いた後は、たちの悪い風邪にかかってしまい。GW明け近くまで臥せっていました。
今回のお仕事はWindowsCE上でEmb [...]]]></description>
			<content:encoded><![CDATA[<p>非常に長いことご無沙汰でした。４月に超短納期の仕事が入りまして、ばたばたしておりました。<br />
それが片付いた後は、たちの悪い風邪にかかってしまい。GW明け近くまで臥せっていました。</p>
<p>今回のお仕事はWindowsCE上でEmbeddedVB3.0で作られたシステムをWindowsMobile6.0 VB2005に移行するものでした。仕様書はほとんどなし。データベースもサンプルにデータが入っていない。<br />
データ構成の資料も無い。という状況で、すべては実機の動作とソースから作成する状況でした。しかも１ヶ月に満たない納期でw。</p>
<p>VB2008ならもう少し融通が利くようでしたが、2005のMobile環境はコントロールが異常に少ないことと、プロパティがほとんどの無いに等しいので一苦労でした。昔のEmbeddedの方がプロパティ多いんですよ。びっくりしました。<br />
なんせClickイベントも拾えないのでGotFocusで擬似動作させたり、Activateイベントが思わぬところで動作してぐちゃぐちゃになったりと祭り状態でした。データベースも以前はCDBというモバイル用Accessでしたが今回はSQL-Serverのコンパクト版ですのでデータ型も再定義の必要がありました。</p>
<p>まあ救いといえばロジック部分はある程度流用できたのですが、随分たくさんの変数が使いまわされていることと、オブジェクトの破棄があまり明確で無い書き方をしていたので、その辺はリークのないように気を使いました。</p>
<p>.NET以降のVBはあまり使ったこと無かったのですが、まあ慣れればVSのIDEと共に、ある程度は使い安いかなと感じました。CakePHPもAptanaとFireFoxのデバッグ機能で随分楽にはなりますが、さすがにVSの便利さには追いつかないですね。</p>
<p>その前はVS2008でWPFを使ってC#で書くお仕事でしたが、こっちは新機能満載でググっても情報無くて苦労しました。</p>
<p>という具合にCakePHPは放置状態ですが新バージョンの安定版が出ているので試してみたいところです。<br />
しかしAndoroidやってみたいのでEclipse+SDKをインストールしてJava勉強中です。<br />
片手間で昔作りかけていた見積書システムをVB2008でいじくって遊んでます。せっかくVBやったので忘れないうちにすこし身につけておこうかなと。簡単なシステムですがある程度出来たらVectorあたりで配布しようかな。</p>
<p>まあ、今時あまりはやらないかもしれませんが、iPhoneとかモバイル端末とかいじってて感じたUIへの思いを少し入れてみようかなと。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-05-13-153/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP覚書#4</title>
		<link>http://www.jirosoft.com/wordpress/2010-03-04-134/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-03-04-134/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 12:19:03 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=134</guid>
		<description><![CDATA[ひとつのモデルの中で関数を作成して簡単に利用したいと思ったのですが、結果を返す際に
他のモデルも参照しなくちゃいけなくなりました。
このあたりは、アソシエーションを使ったほうが良いのかもしれませんが、データベースの作成が [...]]]></description>
			<content:encoded><![CDATA[<p>ひとつのモデルの中で関数を作成して簡単に利用したいと思ったのですが、結果を返す際に<br />
他のモデルも参照しなくちゃいけなくなりました。<br />
このあたりは、アソシエーションを使ったほうが良いのかもしれませんが、データベースの作成がまずくて<br />
うまく出来そうに無いので、モデル内の関数で他のモデルを呼び出して見ました。</p>
<pre class="brush: php;">
$this-&gt;loadModel('ModelA');
</pre>
<p>これは、やはりダメでした。</p>
<p>importでmodelを呼び出して使うみたい。</p>
<pre class="brush: php;">App::import('Model','modelA');
$modelA = new modelA;
$modelA-&gt;find($conditions,null,$orders);
</pre>
<p>こんな感じでいいようです。さて今から検証。</p>
<p>検証の結果うまくいきました。上記App::import(&#8216;model&#8217;と小文字になっていたところを訂正。</p>
<p>モデルの中で他のモデル呼び出すって、ちょっと邪道かなという気もします。</p>
<p>componentあたりに関数作成したほうがいいかもしれませんね。</p>
<p>また、コントローラの中でusesでたくさんのモデル定義していると使わなくてもSQLが走っているようです。</p>
<p>基本になるモデルひとつだけusesで定義しておくか、$uses=null;にしておいて、必要なアクションで必要なモデルを</p>
<p>loadModelしたほうが良い気がしますね。</p>
<p>まだパフォーマンスを上げる段階ではないですが、一通り動作するようになれば、次はパフォーマンス向上が大事だと思います。</p>
<p>現在はWindowsXPの非力なマシン上でXampp環境でのテストですが、ファンが唸ってますからねw</p>
<p>本番では随分昔のDellサーバーに乗せる予定です。こっちも非力ですからね。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-03-04-134/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>jQuery書籍購入</title>
		<link>http://www.jirosoft.com/wordpress/2010-03-04-127/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-03-04-127/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 05:44:32 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[jQuery]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=127</guid>
		<description><![CDATA[たまたま、本屋に行く機会があったのでちょっと立ち読みしてたらjQueryの本を見つけました。
基本的な使い方はWebで調べると色々出てくるのですが、この本はサンプル集が多くて「メニュー」「グリッド」「ツールチップ」などが [...]]]></description>
			<content:encoded><![CDATA[<p>たまたま、本屋に行く機会があったのでちょっと立ち読みしてたらjQueryの本を見つけました。</p>
<p>基本的な使い方はWebで調べると色々出てくるのですが、この本はサンプル集が多くて「メニュー」「グリッド」「ツールチップ」などが</p>
<p>掲載されていたので思わず購入してしまいました。</p>
<p>プラグインの使い方はWebで調べるの結構面倒なんですよね。まあ、例に漏れずすべてのプロパティやアクションを紹介している</p>
<p>わけではないのですが、とりあえず使ってみるきっかけにはいいですよね。</p>
<p>それに、度忘れしちゃうことが多いので、さくっと引いてみて「ああ、そうだった。」って感じで使ってます。</p>
<p><iframe src="http://rcm-jp.amazon.co.jp/e/cm?t=jiroshomepag-22&#038;o=9&#038;p=8&#038;l=as1&#038;asins=4883376494&#038;fc1=000000&#038;IS2=1&#038;lt1=_blank&#038;m=amazon&#038;lc1=0000FF&#038;bc1=000000&#038;bg1=FFFFFF&#038;f=ifr" style="width:120px;height:240px;" scrolling="no" marginwidth="0" marginheight="0" frameborder="0"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-03-04-127/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP覚書#3</title>
		<link>http://www.jirosoft.com/wordpress/2010-03-02-122/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-03-02-122/#comments</comments>
		<pubDate>Tue, 02 Mar 2010 06:10:11 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>
		<category><![CDATA[メモ]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=122</guid>
		<description><![CDATA[連想配列(modelの内容をDBからとってきたもの)の配列。要は複数レコードを入れた配列なんですが、
foreachで回して、項目を変更したのだけど、元の配列自体に変更が及んでいないようで、その後saveAllしても
D [...]]]></description>
			<content:encoded><![CDATA[<p>連想配列(modelの内容をDBからとってきたもの)の配列。要は複数レコードを入れた配列なんですが、</p>
<p>foreachで回して、項目を変更したのだけど、元の配列自体に変更が及んでいないようで、その後saveAllしても</p>
<p>DBに反映されていない。</p>
<p>for文で直接もとの配列を書き直してみよう。</p>
<pre class="brush: php;">foreach ($bs as $b){
	$b['model']['data'] = &quot;test&quot;;
}</pre>
<p>こういう風にすると「$bs」のなかみ$bs[0]['model']['data']は書き換えられなかった。</p>
<pre class="brush: php;">for ($i=0;$i&lt;count($bs);$i++){
	$bs[$i]['model']['data']=&quot;test&quot;;
}</pre>
<p>こうしたらうまく書き換えてくれた。</p>
<p>findなどでデータベースのレコードを取得する場合の条件の書き方でくだらないミス。</p>
<pre class="brush: php;">
$conditions = array('nenrei&gt;' =&gt; $nenrei);
</pre>
<p>フィールド名と比較演算子の間のスペース忘れると変なことになる。</p>
<pre class="brush: php;">where 'nenrei&gt;' = 1</pre>
<p>比較演算子がフィールド名の一部と誤認識される。つーか、空白で区切らないと当たり前のことですね。ww</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-03-02-122/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP覚書#2</title>
		<link>http://www.jirosoft.com/wordpress/2010-03-01-115/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-03-01-115/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 05:47:00 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=115</guid>
		<description><![CDATA[ちょっと複雑なデータ更新が必要になってきたので、トランザクションを調べることにした。
ひとつのテーブルで更新と追加が同時発生、他のテーブルでも同様という風に二つのテーブルにまたがる処理ですが
アソシエーションでは定義でき [...]]]></description>
			<content:encoded><![CDATA[<p>ちょっと複雑なデータ更新が必要になってきたので、トランザクションを調べることにした。</p>
<p>ひとつのテーブルで更新と追加が同時発生、他のテーブルでも同様という風に二つのテーブルにまたがる処理ですが</p>
<p>アソシエーションでは定義できないようなもの。</p>
<p>まずMySQLのテーブルがMyISAMだとロールバックしても効かないので使えない。InnoDBに変更が必要となる。</p>
<pre class="brush: php;">show table  status;</pre>
<p>で現状の確認をする。MyISAMで作っている既存テーブルもInnoDBに変更可能。</p>
<p>変更するには、phpMyAdminであればテーブルの「操作」で「ストレージエンジン」を「InnoDB」に変更して実行押すだけ。</p>
<pre class="brush: php;">alter table 'xxxx'  engine=InooDB;</pre>
<p>が実行された。もちろんコマンドラインから、これを打ってもOKです。</p>
<p>さてさて、begin()  commit()  rollback() をどこで定義しておくか。</p>
<p>必要なテーブルのモデルだけで定義しておいてもいいけど面倒ですね。思い切ってapp_modelに書いとけば全部のモデルで継承してくれますから、これでいいかな。</p>
<p>いつものように、cake以下は触らないお約束で、cake/libs/modelのなかのapp_model.phpをapp/models以下にコピーしておいて追加します。</p>
<pre class="brush: php;">
function begin() {
	$dbs = &amp; ConnectionManager::getDataSource($this-&gt;useDbConfig);
	$dbs-&gt;begin($this);
}

function commit() {
	$dbs = &amp; ConnectionManager::getDataSource($this-&gt;useDbConfig);
	$dbs-&gt;commit($this);

}

function rollback() {
	$dbs = &amp; ConnectionManager::getDataSource($this-&gt;useDbConfig);
	$dbs-&gt;rollback($this);

}
</pre>
<p>これで、モデルの関数になるのでモデル名-&gt;begin()とかで使えます。</p>
<p>2つのモデルを同時更新なら</p>
<pre class="brush: php;">
	ModelA-&gt;begin();

	ModelB-&gt;begin();

	処理ほにゃらら

	なんか問題あったら

	ModelA-&gt;rollback();

	ModelB-&gt;rollback();

	エラー無く終了。

	ModelA-&gt;commit();

	ModelB-&gt;commit();
</pre>
<p>こんな具合かな。それとsavaAllを使うときの注意もあった。saveAllの外側でトランザクション開始していてもループの途中でコミットされちゃうみたいです。対策としてはパラメータを追加しておくこと。</p>
<pre class="brush: php;">
ModelA-&gt;saveAll($datas ,array('atomic'=&gt;false);
</pre>
<p>こんなおまじないが必須だ。</p>
<p>追記:どうもModelA ModelB両方にbegin() rollback() commit()を行わなくても、ModelAだけやっておけば、両方に効力があるという記述を発見。まだ未検証です。</p>
<p><span style="color: #ff0000;">追記:<span style="color: #000000;">検証しました。</span></span></p>
<p><span style="color: #ff0000;"><span style="color: #000000;">実行されたSQLも確認しましたが、どれかひとつのモデルでトランザクション操作しておけばOKです。</span></span></p>
<p><span style="color: #ff0000;"><span style="color: #000000;"><br />
</span></span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-03-01-115/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>cakePHP覚書</title>
		<link>http://www.jirosoft.com/wordpress/2010-02-28-111/</link>
		<comments>http://www.jirosoft.com/wordpress/2010-02-28-111/#comments</comments>
		<pubDate>Sun, 28 Feb 2010 09:14:23 +0000</pubDate>
		<dc:creator>Jiro</dc:creator>
				<category><![CDATA[cakePHP]]></category>

		<guid isPermaLink="false">http://www.jirosoft.com/wordpress/?p=111</guid>
		<description><![CDATA[テーブルに追加しておいたcreatedとmodifiedの項目。
これらの項目を追加しておくと自動的に追加した際と更新した際にタイムスタンプが登録されるはずなのだが
modifiedの更新日時が書き換えられていない。スペ [...]]]></description>
			<content:encoded><![CDATA[<p>テーブルに追加しておいたcreatedとmodifiedの項目。</p>
<p>これらの項目を追加しておくと自動的に追加した際と更新した際にタイムスタンプが登録されるはずなのだが</p>
<p>modifiedの更新日時が書き換えられていない。スペルを間違ってるのかなと心配になりググって見たら</p>
<p>cakePHP1.2からはmodifiedの項目はdefault Nullにしていないと更新されないようなのでテストしてみる。</p>
<p>うまく動作しました。ただdefault値をヌルにしたらSQLエラーで怒られたけど、よく見たらヌルを許可してなかっただけでした。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jirosoft.com/wordpress/2010-02-28-111/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
