<?xml version="1.0" encoding="utf-8" ?>
<rdf:RDF
  xmlns="http://purl.org/rss/1.0/"
  xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
  xmlns:content="http://purl.org/rss/1.0/modules/content/"
  xmlns:dc="http://purl.org/dc/elements/1.1/"
 >

  <channel rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/!feeds/list">
    <title>magicweapon Wiki</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/!feeds/list</link>
    <description>
      SourceForge.jp Wiki pages for magicweapon project.    </description>
        <dc:date>2011-03-30T10:45:11+09:00</dc:date>
        <items>
      <rdf:Seq>
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E3%81%BE%E3%81%9A%E3%81%AF%E5%9F%BA%E6%9C%AC%E3%81%AEHelloWorld" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/FrontPage" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E7%94%A8%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E7%9F%A5%E8%AD%98%E3%82%92%E5%85%88%E3%81%AB" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88MVC%E7%B7%A8" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AF%E3%83%A9%E3%83%B3%E3%83%97%E8%AA%AC%E6%98%8E%E6%9B%B8" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E7%A9%BA%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%A7%E4%BC%9A%E5%93%A1%E7%99%BB%E9%8C%B2%E6%90%BA%E5%B8%AF%E7%B7%A8" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AE%E4%BF%9D%E6%8C%81%E3%81%AE%E4%BB%95%E6%96%B9" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/conv%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/clump%E7%B3%BB%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E8%8D%89%E6%A1%88" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E8%AA%8D%E8%A8%BCconfig%E3%81%AE%E6%9B%B8%E5%BC%8F" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E6%9A%97%E5%8F%B7config%E3%81%AE%E6%9B%B8%E5%BC%8F" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/DB%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/map%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E9%9B%91%E6%96%87%E7%BD%AE%E3%81%8D%E5%A0%B4" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E9%96%8B%E7%99%BA%E9%99%A3%E7%94%A8%E5%90%84%E7%A8%AE%E6%96%87%E6%9B%B8" />
                <rdf:li rdf:resource="http://sourceforge.jp/projects/magicweapon/wiki/%E8%A6%81%E6%9C%9B%E5%90%84%E7%A8%AE" />
              </rdf:Seq>
    </items>
  </channel>

      <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E3%81%BE%E3%81%9A%E3%81%AF%E5%9F%BA%E6%9C%AC%E3%81%AEHelloWorld">
    <title>まずは基本のHelloWorld</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E3%81%BE%E3%81%9A%E3%81%AF%E5%9F%BA%E6%9C%AC%E3%81%AEHelloWorld</link>
    <dc:identifier>まずは基本のHelloWorld</dc:identifier>
    <dc:date>2011-03-30T10:45:11+09:00</dc:date>
        <description>
      <![CDATA[= まずは基本のHelloWorld =

[[PageOutline]]

== 最低限のinstall ==
一言で片付けると「include pathが通っている(あるいは通す予定)のところに、MagicWeaponのソース(ファイル)を一式置いておく」ことが求められます。[[BR]]
っちゅわけなので、必要なのは[[BR]]
・ファイルを設置する場所決めて[[BR]]
・フ]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E3.81.BE.E3.81.9A.E3.81.AF.E5.9F.BA.E6.9C.AC.E3.81.AEHelloWorld">まずは基本の<a href="http://sourceforge.jp/projects/magicweapon/wiki/HelloWorld">HelloWorld</a></h1><div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E3.81.BE.E3.81.9A.E3.81.AF.E5.9F.BA.E6.9C.AC.E3.81.AEHelloWorld">まずは基本のHelloWorld</a>
<ol><li><a href="#h2-.E6.9C.80.E4.BD.8E.E9.99.90.E3.81.AEinstall">最低限のinstall</a>
<ol><li><a href="#h3-.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8B.E5.A0.B4.E6.89.80.E6.B1.BA.E3.82.81.E3.81.A6">ファイルを設置する場所決めて</a>
</li><li><a href="#h3-.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E7.BE.A4.E3.82.92.E3.82.B2.E3.83.88.E3.81.A3.E3.81.A6">ファイル群をゲトって</a>
</li><li><a href="#h3-.E3.81.B6.E3.81.A1.E8.BE.BC.E3.82.80">ぶち込む</a>
</li><li><a href="#h3-.E3.81.8A.E3.81.BE.E3.81.91.E3.81.AE.EF.BC.91.E6.89.8B.E9.A0.86">おまけの１手順</a>
</li></ol></li><li><a href="#h2-.E5.BF.85.E8.A6.81.E3.81.AA.E3.83.87.E3.82.A3.E3.83.AC.E3.82.AF.E3.83.88.E3.83.AA.E3.82.92.E5.88.87.E3.82.8B">必要なディレクトリを切る</a>
</li><li><a href="#h2-config.E3.82.92.E6.9B.B8.E3.81.8F">configを書く</a>
</li><li><a href="#h2-map.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E6.9B.B8.E3.81.8F">mapファイルを書く</a>
</li><li><a href="#h2-model.E3.82.92.E6.9B.B8.E3.81.8F">modelを書く</a>
</li><li><a href="#h2-temlpate.E3.82.92.E8.A8.AD.E7.BD.AE">temlpateを設置</a>
</li><li><a href="#h2-.E3.83.87.E3.83.90.E3.83.83.E3.82.B0.E3.83.97.E3.83.AA.E3.83.B3.E3.83.88.E3.81.AE.E5.87.BA.E3.81.97.E6.96.B9">デバッグプリントの出し方</a>
</li><li><a href="#h2-.E3.83.AD.E3.82.B0.E3.81.AE.E5.90.90.E3.81.8D.E6.96.B9">ログの吐き方</a>
</li><li><a href="#h2-.E6.9A.AE.E3.82.89.E3.81.97.E3.81.AE.E3.83.92.E3.83.B3.E3.83.88">暮らしのヒント</a>
<ol><li><a href="#h3-Smarty.E3.82.92.E4.BD.BF.E3.81.86.E3.81.A8.E3.81.8D.E3.81.AF.EF.BC.9F">Smartyを使うときは？</a>
</li><li><a href="#h3-.E5.85.B1.E6.9C.89.E3.82.B5.E3.83.BC.E3.83.90.E3.81.A7.E4.BD.BF.E3.81.86.E3.81.A8.E3.81.8D.E7.94.A8.E3.81.AE.E4.B8.80.E6.A1.88">共有サーバで使うとき用の一案</a>
</li></ol></li></ol></li></ol></div>
<h2 id="h2-.E6.9C.80.E4.BD.8E.E9.99.90.E3.81.AEinstall">最低限のinstall</h2><p>一言で片付けると「include pathが通っている(あるいは通す予定)のところに、<a href="http://sourceforge.jp/projects/magicweapon/wiki/MagicWeapon">MagicWeapon</a>のソース(ファイル)を一式置いておく」ことが求められます。<br />
っちゅわけなので、必要なのは<br />
・ファイルを設置する場所決めて<br />
・ファイル群をゲトって<br />
・ぶち込む<br />
の３工程。おまけでもう１工程あると楽なんで、そのあたりも含めて。<br />
<br />
</p><h3 id="h3-.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E8.A8.AD.E7.BD.AE.E3.81.99.E3.82.8B.E5.A0.B4.E6.89.80.E6.B1.BA.E3.82.81.E3.81.A6">ファイルを設置する場所決めて</h3><p>まず「ファイルを設置する場所」ですが…まぁぶっちゃけお好きに。<br />
…ってだけだと指針になりにくいので、いくつか指針の草案を。<br />
・「専用サーバ」かつ「単一サービスを運用する or ちゃんと管理された複数サービスを運用する」なら、例えば「/opt/htdocs/MW/」とかがお勧め。「/var/httpd/MW」とかってのもまぁあり。<br />
・「共有サーバ」または「実験的に用いる」場合、ログインしたときの、いわゆる「カレントディレクトリ」直下にMWってディレクトリを切ったりすると割合に幸せです。で、もし「カレントディレクトリが<a href="http://sourceforge.jp/projects/magicweapon/wiki/DocumentRoot">DocumentRoot</a>を兼任している」場合、mod_rewriteが使えるのであれば<br />
<pre>RewriteEngine on
RewriteRule    ^$   プロジェクト用ディレクトリ/wwwroot/    [L]
RewriteRule    (.*) プロジェクト用ディレクトリ/wwwroot/$1    [L]
</pre>なんて書いておくと、色々と面倒が省けたりします。<br />
<br />
</p><h3 id="h3-.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E7.BE.A4.E3.82.92.E3.82.B2.E3.83.88.E3.81.A3.E3.81.A6">ファイル群をゲトって</h3><p>ダウンロード一覧からでもよいのですが…ごめんなさい、たぶん、割とメンテナンスがなってません orz<br />
<a href="http://sourceforge.jp/projects/magicweapon/svn/view/PHP.tar.gz?root=magicweapon&amp;view=tar">http://sourceforge.jp/projects/magicweapon/svn/view/PHP.tar.gz?root=magicweapon&amp;view=tar</a>
のレポジトリからのダウンロードを、わりと強めにお勧めいたします。<br />
</p><h3 id="h3-.E3.81.B6.E3.81.A1.E8.BE.BC.E3.82.80">ぶち込む</h3><p>お好きなソフトで、あらかじめ決めておいた場所にずずずんとぶち込んでください。tar ballのままでぶち込む人もいないかとは思いますが、一応念のため、ご注意くださいませ。<br />
初めから「サーバ上でwgetする」ってのも賢いかと思われますが、その辺はお好みで。<br />
</p><h3 id="h3-.E3.81.8A.E3.81.BE.E3.81.91.E3.81.AE.EF.BC.91.E6.89.8B.E9.A0.86">おまけの１手順</h3><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/MagicWeapon">MagicWeapon</a>は、概ね「ファイルを設置する場所」にinclude pathが通ってることを前提にしています、前述したとおり。<br />
なので、以下のようなファイルを作っておくと色々と手間が減ります。<br />
ファイル名は、まぁお好みで。おいちゃんは「mw.conf」って名前にしてます。
<pre>&lt;?php
// Frame workのクラスが一式インストールされてる場所
$dir = &quot;ファイルを設置する場所&quot;;
set_include_path(get_include_path() . &quot;:&quot; . $dir);
</pre></p><h2 id="h2-.E5.BF.85.E8.A6.81.E3.81.AA.E3.83.87.E3.82.A3.E3.83.AC.E3.82.AF.E3.83.88.E3.83.AA.E3.82.92.E5.88.87.E3.82.8B">必要なディレクトリを切る</h2><p>いやまぁ別に「広大なのっぺりしたディレクトリにありとあらゆるファイルが渾然一体としてまったりとした」状態を否定はしませんが、扱いにくいからやめませう。つまりは否定ｗ<br />
とりあえずまず何よりも、今回のWebアプリ(プロジェクト)で１ディレクトリをまず切ります。<br />
んで。その中に、まずは以下のディレクトリを切っておきましょう。<br />
<pre>conf
lib
wwwroot
temlpate
log
</pre></p><h2 id="h2-config.E3.82.92.E6.9B.B8.E3.81.8F">configを書く</h2><p>何はともあれ設定ファイルです。最低限設定したいものを盛り込んだ設定ファイルは、概ねこんな感じざんす。<br />
ファイル名はまぁなんでもよいのですが、config.confって書いてることが、おいちゃんは、割合に多いですかねぇ。<br />
<br />
あわせて、DIの話も。んと…以前はconfig.confに書いていたのですが、ちと機能的に「増えてきたし切り出したほうが効率的だなぁ」的出来事がありまして、切り出しました。<br />
「でぺんでんしぃ いんぢぇくしょん(Dependency Injection：依存性の注入)」とかって名前が付いてますが、現実的には「工場(ファクトリー：factory)」程度の機能をご想像ください。<br />
<br />
</p><h2 id="h2-map.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E6.9B.B8.E3.81.8F">mapファイルを書く</h2><h2 id="h2-model.E3.82.92.E6.9B.B8.E3.81.8F">modelを書く</h2><h2 id="h2-temlpate.E3.82.92.E8.A8.AD.E7.BD.AE">temlpateを設置</h2><h2 id="h2-.E3.83.87.E3.83.90.E3.83.83.E3.82.B0.E3.83.97.E3.83.AA.E3.83.B3.E3.83.88.E3.81.AE.E5.87.BA.E3.81.97.E6.96.B9">デバッグプリントの出し方</h2><h2 id="h2-.E3.83.AD.E3.82.B0.E3.81.AE.E5.90.90.E3.81.8D.E6.96.B9">ログの吐き方</h2><h2 id="h2-.E6.9A.AE.E3.82.89.E3.81.97.E3.81.AE.E3.83.92.E3.83.B3.E3.83.88">暮らしのヒント</h2><h3 id="h3-Smarty.E3.82.92.E4.BD.BF.E3.81.86.E3.81.A8.E3.81.8D.E3.81.AF.EF.BC.9F">Smartyを使うときは？</h3><h3 id="h3-.E5.85.B1.E6.9C.89.E3.82.B5.E3.83.BC.E3.83.90.E3.81.A7.E4.BD.BF.E3.81.86.E3.81.A8.E3.81.8D.E7.94.A8.E3.81.AE.E4.B8.80.E6.A1.88">共有サーバで使うとき用の一案</h3>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/FrontPage">
    <title>FrontPage</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/FrontPage</link>
    <dc:identifier>FrontPage</dc:identifier>
    <dc:date>2011-03-29T16:09:29+09:00</dc:date>
        <description>
      <![CDATA[= !MagicWeapon プロジェクト Wiki =

!MagicWeapon のプロジェクト Wiki ページへようこそ。
さて&hellip;なに書こうかねぇ(笑

とりあえず、このPageは「開発者およびその周辺の人たち向け」なので、単純な使い方とかはまた別Pageにまとめる予定。

----
== お知らせ
2011/03/吉日：[[BR]]
久しぶりに文書書きま]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.21MagicWeapon.20.E3.83.97.E3.83.AD.E3.82.B8.E3.82.A7.E3.82.AF.E3.83.88.20Wiki">MagicWeapon プロジェクト Wiki</h1><p>MagicWeapon のプロジェクト Wiki ページへようこそ。
さて…なに書こうかねぇ(笑
</p><p>とりあえず、このPageは「開発者およびその周辺の人たち向け」なので、単純な使い方とかはまた別Pageにまとめる予定。
</p><hr /><h2 id="h2-.E3.81.8A.E7.9F.A5.E3.82.89.E3.81.9B">お知らせ</h2><p>2011/03/吉日：<br />
久しぶりに文書書きます。<br />
ちと本格的に使いかたを。書きあがったらまたそのようにお知らせをいたします ノ<br />
<br />
2008/01/10：<br />
一発目がメモかよ特集ｗ<br />
別ウィンドウでデバッグトレース出力が出るとうれしいな。モード切替で。 
</p><p>console.log()にはき出してくれても素敵かも。
</p><p>エラー系の制御は欲しいですね。
特に最初にMWを導入する時など、何が原因で稼働していないのか調査に時間かかることもあると思うので。
PHP4バージョンのMWを導入時に2日3日ハマった記憶がありますです。。。
</p><p>2007/12/24：<br />
イブになにやってんだスペシャルｗ<br />
携帯関連とか少しものができあがってきました。<br />
<br />
2007/11/22：<br />
DBクラスのクラス名変更しました。<br />
…本来ならかなりクリティカルな変更ですが。実際には多分DBマネージャつかって、誰一人として生のDBハンドルクラス触ってないと思うので(笑<br />
これで、PEARと(大文字小文字が違うのに)クラス名一緒とか言われる状況を避けられます。<br />
ついでに、これはまだ未定ですが。DBハンドルクラスインスタンス内に、SQL作成用のクラスインスタンス持たせちゃう予定です。<br />
その辺は後日。<br />
<br />
それ以前ｗ<br />
uncheckingディレクトリは「コメントとか復帰値とかがまだ未チェック」なブツです。
</p><p>一応がるが一通りコメントとか修正する予定ですが、手伝ってくれる人いたら是非にもよろ。っつかぶっちゃけ多すぎ(苦笑
</p><p>ついでにドキュメンターも鋭意募集中ｗ
</p><p>今後の予定。
</p><p>とりあえず、まずとにかく「PHPDoc用のコメント入れて」「復帰値をルールに従って変更して」ってのをやって、0.1.0として出します(これはLHAにもする予定)。
</p><p>その後は色々とイメージしてる改修を。最低限、いくつか現状想定している部分(特にMVC関連のクラス)を落ち着かせて、かな。
</p><p>1.0.0をどんなバージョンにするかは現状まだ未定。まぁあんまりその辺細かくは考えてないんだけど(笑
</p><p>とりあえず使えるクラスから使って、なんかあったら連絡くださいませ。
</p><hr /><h2 id="h2-.E6.96.87.E6.9B.B8.E5.90.84.E7.A8.AE">文書各種</h2><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E7%94%A8%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB">使用マニュアル</a><br />
MagicWeapon の使用マニュアルを書いてみます。まずはここの文章を一通り読んでいただけるとありがたいです。
</p><hr /><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E8%8D%89%E6%A1%88">インストール方法草案</a><br />
インストールの方法への「提案」です。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88">使い方の提案</a><br />
MagicWeaponをどんな風に使うのかの「提案」です。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88MVC%E7%B7%A8">使い方の提案MVC編</a><br />
MagicWeaponを「MVCありありフレームワークとして」どんな風に使うのかの「提案」です。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E7%A9%BA%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%A7%E4%BC%9A%E5%93%A1%E7%99%BB%E9%8C%B2%E6%90%BA%E5%B8%AF%E7%B7%A8">空メールで会員登録携帯編</a><br />
携帯サイトでありがちな「空メール打って～の登録してぇの」な流れを簡単にやる一案です。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/clump%E7%B3%BB%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D">clump系覚え書き</a><br />
MagicWeaponの特徴的なクラス群「clump系」についての覚え書きです。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/conv%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D">conv覚え書き</a><br />
MagicWeaponの特徴的な？置換エンジン「conv」とその周りについての覚え書きです。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E9%96%8B%E7%99%BA%E9%99%A3%E7%94%A8%E5%90%84%E7%A8%AE%E6%96%87%E6%9B%B8">開発陣用各種文書</a><br />
開発の時のルールとか。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E8%A6%81%E6%9C%9B%E5%90%84%E7%A8%AE">要望各種</a><br />
とりあえずメモ＆考察用に。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AE%E4%BF%9D%E6%8C%81%E3%81%AE%E4%BB%95%E6%96%B9">セッション情報の保持の仕方</a><br />
ログインクラスとか自作なので。$_SESSIONとか使いたくないんで色々作ってます。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E9%9B%91%E6%96%87%E7%BD%AE%E3%81%8D%E5%A0%B4">雑文置き場</a><br />
整理できてない文書をとりあえず置いてます。
大抵、推敲もなんもあったもんじゃない文章なので、覗くときは「そ～っと覗いて」「生暖かく見守って」ください。
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AF%E3%83%A9%E3%83%B3%E3%83%97%E8%AA%AC%E6%98%8E%E6%9B%B8">データクランプ説明書</a><br />
ある意味、MagicWeaponの最大級の特徴の一つとも言える(ついでに言うとMagicWeapon内で尤もメタボなクラスでもある(苦笑) )、data clumpと、その継承クラスであるdata clump validator(通称validate clump)の「基本的な使い方」と「お便利な手の抜き方」を書いてみます。
</p><hr /><h2 id="h2-.E3.81.9D.E3.81.AE.E4.BB.96">その他</h2><p>wikiの文法は
<a href="http://sourceforge.jp/projects/sourceforge/wiki/Guide%2FWikiSyntax#h2-.E8.A6.8B.E5.87.BA.E3.81.97">http://sourceforge.jp/projects/sourceforge/wiki/Guide%2FWikiSyntax#h2-.E8.A6.8B.E5.87.BA.E3.81.97</a>
を参照。
</p><p>SVNは
<a href="http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/?root=magicweapon" class="external" rel="nofollow">http://svn.sourceforge.jp/cgi-bin/viewcvs.cgi/?root=magicweapon</a>
ここから最新のソースがげとれる。
</p><p>PHPDocumentorによるドキュメントを作ってみました。
<a href="http://maporfic.m-fr.net/mw_doc/" class="external" rel="nofollow">http://maporfic.m-fr.net/mw_doc/</a>
<a href="http://maporfic.m-fr.net/mw_doc_s/" class="external" rel="nofollow">http://maporfic.m-fr.net/mw_doc_s/</a>
こんなあたりからどんぞ。</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E7%94%A8%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB">
    <title>使用マニュアル</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E7%94%A8%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB</link>
    <dc:identifier>使用マニュアル</dc:identifier>
    <dc:date>2011-03-23T11:37:23+09:00</dc:date>
        <description>
      <![CDATA[= !MagicWeapon 使用マニュアル
PHP用フレームワーク「!MagicWeapon」の、概ねチュートリアルです。
「概ね」というのは、単純に使い方だけではなくて、その「裏側にある思想」も書いてあるからです。
思想とかいうと格好よいけど、まぁ大抵は本音と愚痴と悩みに躊躇を足しこんだカルテット B-p

フレームワークの使い方も去ることながら。
そこから、内側にある「おいちゃん]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.21MagicWeapon.20.E4.BD.BF.E7.94.A8.E3.83.9E.E3.83.8B.E3.83.A5.E3.82.A2.E3.83.AB">MagicWeapon 使用マニュアル</h1><p>PHP用フレームワーク「MagicWeapon」の、概ねチュートリアルです。
「概ね」というのは、単純に使い方だけではなくて、その「裏側にある思想」も書いてあるからです。
思想とかいうと格好よいけど、まぁ大抵は本音と愚痴と悩みに躊躇を足しこんだカルテット B-p
</p><p>フレームワークの使い方も去ることながら。
そこから、内側にある「おいちゃん的思想：我留流」を汲み取っていただければとってもうれしいざんす。
</p><p>注意
わりと「身内向けの文体」なので、そのあたり平にご容赦のほどを。
</p><div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.21MagicWeapon.20.E4.BD.BF.E7.94.A8.E3.83.9E.E3.83.8B.E3.83.A5.E3.82.A2.E3.83.AB">MagicWeapon 使用マニュアル</a>
<ol><li><a href="#h2-.E5.9F.BA.E6.9C.AC.E7.B7.A8">基本編</a>
</li><li><a href="#h2-.E4.B8.8A.E7.B4.9A.E7.B7.A8">上級編</a>
</li></ol></li></ol></div>
<h2 id="h2-.E5.9F.BA.E6.9C.AC.E7.B7.A8">基本編</h2><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E7%9F%A5%E8%AD%98%E3%82%92%E5%85%88%E3%81%AB">最低限の知識を先に</a><br />
	MVCとは？
	テンプレートエンジンとは？
	MWでのMVCの流れ
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%81%BE%E3%81%9A%E3%81%AF%E5%9F%BA%E6%9C%AC%E3%81%AEHelloWorld">まずは基本のHelloWorld</a><br />
	最低限のinstall
	configを書く
	mapファイルを書く
	modelを書く
	temlpateを設置
	デバッグプリントの出し方
	ログの吐き方
	Smartyを使うときは？
	共有サーバで使うとき用の一案
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E9%9D%99%E7%9A%84Page%E5%87%BA%E5%8A%9B%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E6%A1%88%EF%BC%92%E7%A8%AE">静的Page出力のための案２種</a><br />
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%83%86%E3%82%B9%E3%83%88%E7%92%B0%E5%A2%83%E3%81%A8%E6%9C%AC%E7%95%AA%E7%92%B0%E5%A2%83%E3%81%AE%E5%85%B1%E5%AD%98%E3%81%AE%E3%81%95%E3%81%9B%E6%96%B9">テスト環境と本番環境の共存のさせ方</a><br />
	環境依存系configの切り分け方とデプロイの仕方
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%81%84%E3%82%8F%E3%82%86%E3%82%8Bform">mailの書き方</a><br />
	とりあえずmockupを設置
	cgi requestを取得する
	validateチェックとエラー用の転送
	転送処理の細かい流れとbagのお話
	mailを送る(雑)
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/DB%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%81%AE">input -&gt; confirm -&gt; fin</a><br />
	テーブルを切る
	DB ハンドルの設定
	data_clumpの(とりあえずの)設定
	入力を受け取る
	validateの設定をしてみる ＆ validateチェックをしてみる
	データを書き込む
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/DB%E3%81%AE%E6%83%85%E5%A0%B1%E3%82%92%E5%87%BA%E5%8A%9B%E3%81%99%E3%82%8B">DBの情報を出力する</a><br />
	単純なlist出力のお作法
	Pagingのお作法
	「検索条件付き」のお作法
	「検索条件付きでのPaging」のお作法
	考察ネタ：レコードの削除はどうする？
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%EF%BC%91%E3%83%AC%E3%82%B3%E3%83%BC%E3%83%89%E3%81%AE%E8%A9%B3%E7%B4%B0%E8%A1%A8%E7%A4%BA%E3%81%A8%E4%BF%AE%E6%AD%A3">１レコードの詳細表示と修正</a><br />
	とりあえず１レコードを表示してみる
	set_from_cgi_inputとset_from_cgi_editの使い分け
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%81%84%E3%82%8F%E3%82%86%E3%82%8Bform">mailの書き方 改良編</a><br />
	data_clumpを作ってみる
	validateをdata_clumpに任せた状態で、プログラムを改修してみる
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E7%AE%A1%E7%90%86%E7%94%BB%E9%9D%A2%E3%81%A8%E8%AA%8D%E8%A8%BC%E7%B3%BB%E3%81%AE%E6%9B%B8%E3%81%8D%E6%96%B9">管理画面と認証系の書き方</a><br />
	とりあえずmockup
	標準モジュール使って認証させてみる
	認証後Pageの閲覧
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E8%AA%8D%E8%A8%BC%E3%81%AE%E7%A8%AE%E9%A1%9E%E3%82%92%E5%A2%97%E3%82%84%E3%81%99">認証の種類を増やす</a><br />
	frontの一部を認証系にしてみる
	認証周りってどうなってるの？
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E9%96%A2%E6%89%80%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E5%B0%91%E3%81%97">関所について少し</a><br />
	「アプリ全体」で特定の処理をしたい
	「管理画面全体」or「front全体」で特定の処理をしたい
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E6%90%BA%E5%B8%AF%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AB%E3%81%9D%E3%81%AE%EF%BC%91">携帯サイトのためにその１</a><br />
	configの設定のしなおし：文字コード
	単純に携帯サイトだけの場合(view classの変更
	PCと携帯(とスマフォ)で共存させる場合(スイッチ付きの変更
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E6%90%BA%E5%B8%AF%E3%82%B5%E3%82%A4%E3%83%88%E3%81%A7%E3%81%AE%E8%AA%8D%E8%A8%BC">携帯サイトでの認証</a><br />
	先にセキュリティの話
	(あきらめて)契約者固有IDで認証をしてみる
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E6%90%BA%E5%B8%AF%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E7%B5%B5%E6%96%87%E5%AD%97%E5%91%A8%E3%82%8A">携帯サイトの絵文字周り</a><br />
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%83%90%E3%83%83%E3%83%81%E3%81%A8%E3%81%AE%E5%85%B1%E5%AD%98">バッチとの共存</a><br />
	バッチを作るための基本
	設定のどのあたりが「Web側と共有」出来ているのか？
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E3%80%8C%E7%A9%BA%E3%83%A1%E3%83%BC%E3%83%AB%E5%8F%97%E4%BF%A1%E3%82%92%E5%A5%91%E6%A9%9F%E3%81%AB%E3%81%97%E3%81%9F%E4%BC%9A%E5%93%A1%E7%99%BB%E9%8C%B2%E3%80%8D%E3%81%AE%E5%AE%9F%E8%A3%85%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%90%E3%83%83%E3%83%81%E3%81%AE%E5%AE%9F%E4%BE%8B">「空メール受信を契機にした会員登録」の実装で学ぶバッチの実例</a><br />
	設定して
	空メールを受け取って
	mailを返して
	web:その他入力がない場合の処理の流れ
	web:その他入力がある場合の処理の流れ
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/data_clump%E3%81%AB%E8%BF%BD%E8%A8%98%E3%81%97%E3%81%A6%E3%81%BF%E3%82%8B">data_clumpに追記してみる</a><br />
	ラジオボタンの書き方
	チェックボックスの書き方草案
	出力要素が増えてみた
	ど～しても、情報を暗号化しておきたい
</p><hr /><h2 id="h2-.E4.B8.8A.E7.B4.9A.E7.B7.A8">上級編</h2><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/%E5%A4%A7%E8%A6%8F%E6%A8%A1%E3%81%AB%E3%82%80%E3%81%91%E3%81%A6">大規模にむけて</a><br />
	DB分散とmemchachedのやり方
</p><p><a href="http://sourceforge.jp/projects/magicweapon/wiki/URI%E3%82%92static%E3%81%A3%E3%81%BD%E3%81%8F%E3%81%97%E3%81%9F%E3%81%84%E3%81%A8%E3%81%8D%E7%94%A8%E3%81%AE%E4%B8%80%E6%A1%88">URIをstaticっぽくしたいとき用の一案</a><br />
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E7%9F%A5%E8%AD%98%E3%82%92%E5%85%88%E3%81%AB">
    <title>最低限の知識を先に</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E6%9C%80%E4%BD%8E%E9%99%90%E3%81%AE%E7%9F%A5%E8%AD%98%E3%82%92%E5%85%88%E3%81%AB</link>
    <dc:identifier>最低限の知識を先に</dc:identifier>
    <dc:date>2011-02-25T11:29:27+09:00</dc:date>
        <description>
      <![CDATA[= 最低限の知識を先に =

とりあえずMVCに関しては適宜ぐぐってください&hellip;だと色々とぶれるので。[[BR]]
手前味噌恐縮ですが、以下を先にご一読くださいませ。[[BR]]
http://www.phppro.jp/school/oop/vol4/1 [[BR]]
http://www.phppro.jp/school/oop/vol5/1 [[BR]]


MW]]>
    </description>
    <content:encoded>
      <![CDATA[<h1 id="h1-.E6.9C.80.E4.BD.8E.E9.99.90.E3.81.AE.E7.9F.A5.E8.AD.98.E3.82.92.E5.85.88.E3.81.AB">最低限の知識を先に</h1><p>とりあえずMVCに関しては適宜ぐぐってください…だと色々とぶれるので。<br />
手前味噌恐縮ですが、以下を先にご一読くださいませ。<br />
<a href="http://www.phppro.jp/school/oop/vol4/1" class="external" rel="nofollow">http://www.phppro.jp/school/oop/vol4/1</a> <br />
<a href="http://www.phppro.jp/school/oop/vol5/1" class="external" rel="nofollow">http://www.phppro.jp/school/oop/vol5/1</a> <br />
</p><p>MWでは
</p><ul><li>１つのcontrollerが「cgi requestを受け取る君」「門番君(やるんならコントローラ継承して実装追加して)」「必要なインスタンスを作る君」「処理を&quot;実処理してくれる君&quot;に振り分ける君」までを担当
</li><li>「実処理をしてくれる君」はmodelと呼称
</li><li>「DBとの仲立ちをしてくれる君」はdata_clumpっていうクラスが概ね。ただし「自力でSQL」もがんがん。その辺は後ほど
</li><li>「テンプレートファイルと変数群からHTMLを動的に作ってくれる君」は、MWオリジナルとしてはconvというクラス(実際にはセキュリティを考慮した secure_conv )か、または一般的なSmartyが多い
</li><li>「cgi responseを出力してくれる君」はviewクラスが担当
</li><li>最後の「最後の後片付けとお掃除君」は、controllerの受け持ち
</li></ul><p>という流れになります。なので、基本的には
</p><ul><li>controllerが前処理を色々
</li><li>controllerがmodelをcall：処理する
</li><li>controllerがviewをcall：出力する
</li><li>controllerがお片づけ
</li></ul><p>という、controller主体の動きとなります。<br />
<br />
また、このために、１プロジェクト単位でみると
</p><ul><li>ひとつのcontroller(index.phpとかでnewする)
</li><li>たくさんのmodel群(controller内で必要に応じてinclude ＆ newされる)
</li><li>ひとつのview(controller内で設定に応じたviewクラスがinclude ＆ newされる)
</li></ul><p>というインスタンス割り当てになります。<br />
<br />
…っていきなり書かれてもよくわからないと思うので。<br />
わからなくなったら適宜戻ってきてください。そのうちだんだん「あぁこーゆーことだ～」って思えるようになりますんで。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88MVC%E7%B7%A8">
    <title>使い方の提案MVC編</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88MVC%E7%B7%A8</link>
    <dc:identifier>使い方の提案MVC編</dc:identifier>
    <dc:date>2010-05-20T13:08:38+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= MVCでもっとお便利編

== 準備
=== マウント用プログラムの設置
九分九厘、index.phpとかいう名前になりますが、別に固定ではありません。[[BR]]
中身は多くの場合
{{{ code php
&lt;?php
// MW config
require_once(&#039;mw.confへのフルパス&#039;);
]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-MVC.E3.81.A7.E3.82.82.E3.81.A3.E3.81.A8.E3.81.8A.E4.BE.BF.E5.88.A9.E7.B7.A8">MVCでもっとお便利編</a>
<ol><li><a href="#h2-.E6.BA.96.E5.82.99">準備</a>
<ol><li><a href="#h3-.E3.83.9E.E3.82.A6.E3.83.B3.E3.83.88.E7.94.A8.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.81.AE.E8.A8.AD.E7.BD.AE">マウント用プログラムの設置</a>
</li><li><a href="#h3-config.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E6.BA.96.E5.82.99">configファイルの準備</a>
</li></ol></li><li><a href="#h2-.E3.81.A8.E3.82.8A.E3.81.82.E3.81.88.E3.81.9A.E4.BD.9C.E3.81.A3.E3.81.A6.E3.81.BF.E3.82.8B">とりあえず作ってみる</a>
<ol><li><a href="#h3-.E6.9C.80.E4.BD.8E.E9.99.90.E6.AC.B2.E3.81.97.E3.81.84.E5.AE.9F.E8.A3.85">最低限欲しい実装</a>
</li><li><a href="#h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88.E6.83.85.E5.A0.B1.28.E5.85.A5.E5.8A.9B.E6.83.85.E5.A0.B1.29.E3.81.AE.E3.81.A8.E3.82.8A.E3.81.8B.E3.81.9F">リクエスト情報(入力情報)のとりかた</a>
</li><li><a href="#h3-DB.E3.83.8F.E3.83.B3.E3.83.89.E3.83.AB">DBハンドル</a>
</li><li><a href="#h3-.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.82.A8.E3.83.B3.E3.82.B8.E3.83.B3">テンプレートエンジン</a>
</li><li><a href="#h3-.E3.83.A6.E3.83.BC.E3.82.B6ID.E3.81.AE.E5.8F.96.E5.BE.97">ユーザIDの取得</a>
</li><li><a href="#h3-.E9.9B.91.E3.81.AA.E5.87.BA.E5.8A.9B.E4.BE.9D.E9.A0.BC">雑な出力依頼</a>
</li><li><a href="#h3-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E6.83.85.E5.A0.B1.E5.91.A8.E3.82.8A">セッション情報周り</a>
</li><li><a href="#h3-.E3.82.BB.E3.82.AD.E3.83.A5.E3.83.AA.E3.83.86.E3.82.A3.E5.91.A8.E3.82.8A">セキュリティ周り</a>
</li></ol></li><li><a href="#h2-.E3.81.A1.E3.82.87.E3.81.A3.E3.81.A8.E5.AE.9F.E8.B7.B5.EF.BC.9A.E5.85.A5.E5.8A.9B-.3E.E7.A2.BA.E8.AA.8D-.3E.E5.AE.8C.E4.BA.86">ちょっと実践：入力-&gt;確認-&gt;完了</a>
<ol><li><a href="#h3-.E3.81.BE.E3.81.9Aclump.E3.82.92.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B">まずclumpを用意する</a>
</li><li><a href="#h3-.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.82.92.E6.BA.96.E5.82.99.E3.81.99.E3.82.8B.E3.80.82">テンプレートを準備する。</a>
</li><li><a href="#h3-.E3.80.8C.E5.85.A5.E5.8A.9B.E7.94.BB.E9.9D.A2.E5.87.BA.E5.8A.9Bmodel.E3.80.8D.E4.BD.9C.E6.88.90.E3.81.AE.EF.BC.91">「入力画面出力model」作成の１</a>
</li><li><a href="#h3-.E3.80.8C.E7.A2.BA.E8.AA.8D.E7.94.BB.E9.9D.A2.E5.87.BA.E5.8A.9Bmodel.E3.80.8D.E4.BD.9C.E6.88.90.E3.81.AE.EF.BC.91">「確認画面出力model」作成の１</a>
</li><li><a href="#h3-.E3.80.8C.E7.A2.BA.E8.AA.8D.E7.94.BB.E9.9D.A2.E5.87.BA.E5.8A.9Bmodel.E3.80.8D.E4.BD.9C.E6.88.90.E3.81.AE.EF.BC.92.EF.BD.9E.E4.BB.8A.E5.BA.A6.E3.81.AF.E3.83.81.E3.82.A7.E3.83.83.E3.82.AF.E3.81.A0.EF.BC.81.EF.BC.81">「確認画面出力model」作成の２～今度はチェックだ！！</a>
</li></ol></li></ol></li></ol></div>
<h1 id="h1-MVC.E3.81.A7.E3.82.82.E3.81.A3.E3.81.A8.E3.81.8A.E4.BE.BF.E5.88.A9.E7.B7.A8">MVCでもっとお便利編</h1><h2 id="h2-.E6.BA.96.E5.82.99">準備</h2><h3 id="h3-.E3.83.9E.E3.82.A6.E3.83.B3.E3.83.88.E7.94.A8.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.81.AE.E8.A8.AD.E7.BD.AE">マウント用プログラムの設置</h3><p>九分九厘、index.phpとかいう名前になりますが、別に固定ではありません。<br />
中身は多くの場合
<div class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;MW&nbsp;config<br /></span><span style="color: #007700">require_once(</span><span style="color: #DD0000">'mw.confへのフルパス'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;config<br /></span><span style="color: #0000BB">$bp&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">基準ディレクトリ</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$config&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$bp&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'configファイルの位置'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//<br /></span><span style="color: #007700">require_once(</span><span style="color: #DD0000">'controller.inc'</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;</span><span style="color: #FF8000">//<br />&nbsp;&nbsp;</span><span style="color: #0000BB">$cobj&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">controller</span><span style="color: #007700">;<br />&nbsp;&nbsp;</span><span style="color: #0000BB">$cobj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_base_path</span><span style="color: #007700">(</span><span style="color: #0000BB">$bp</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">$cobj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_config</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">);<br />&nbsp;&nbsp;</span><span style="color: #0000BB">$cobj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">run</span><span style="color: #007700">();<br /></span>
</span>
</code></div>こんな感じになろうかと思います。
</p><h3 id="h3-config.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E6.BA.96.E5.82.99">configファイルの準備</h3><p>最低限必要なのは以下のとおりです。
</p><pre># 入力(内部処理エンコーディング)
inside_encoding_type = EUC
# 出力
output_encoding_type = SJIS
</pre><p>いやまぁ内部UTF-8でもよいのですが、なんとなくEUCのほうが実績が多いのでEUCにしてます。<br />
出力は、PC系ならUTF-8のほうがベターかと。携帯系だとsjisでほぼ決まりですね現状。
</p><pre># map ファイル
mapping_file_path = マップファイルをフルパスで
</pre><p>MVCのmodelを決め打ちしてるファイルなので、これがないといろいろ始まりません。<br />
<a href="http://sourceforge.jp/projects/magicweapon/wiki/map%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F">mapファイルの書式</a>
</p><pre># DB設定
db_config_path = DB設定ファイルをフルパスで
</pre><p>DB使うならほぼ必須だと思ってください。<br />
なお、このファイルにはDB接続のパスワードが書いてあるので。documentroot以下に置くのは厳禁です。<br />
<a href="http://sourceforge.jp/projects/magicweapon/wiki/DB%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F">DB設定ファイルの書式</a>
</p><pre># 共通ルーチンが入っているPath。include_pathにくっつけてもらえるから便利。
# マッピングファイルに書かれているビジネスロジックの場所
common_include_dir = 基準になるディレクトリ。最後は'/'で終わりませう。
</pre><p>基準になるディレクトリをひとつだけ指定しませう。
</p><pre># テンプレートファイル
template_dir = テンプレートが入ってるディレクトリ。最後はやっぱり'/'で。
</pre><p>HTMLテンプレートが入ってるディレクトリ名をここで指定します。
</p><pre># 認証config
session_config = 認証設定ファイルをフルパスで
</pre><p>認証系の場合、自力でどうにかしてもよいのですが、この設定ファイルを使うとめっさ便利です。<br />
<a href="http://sourceforge.jp/projects/magicweapon/wiki/%E8%AA%8D%E8%A8%BCconfig%E3%81%AE%E6%9B%B8%E5%BC%8F">認証configの書式</a>
</p><p>configファイルをまとめると大体こんな感じです。
<pre># 入力(内部処理エンコーディング)
inside_encoding_type = EUC
# 出力
output_encoding_type = SJIS

# map ファイル
mapping_file_path = マップファイルをフルパスで

# DB設定
db_config_path = DB設定ファイルをフルパスで

# 共通ルーチンが入っているPath。include_pathにくっつけてもらえるから便利。
# マッピングファイルに書かれているビジネスロジックの場所
common_include_dir = 基準になるディレクトリ。最後は'/'で終わりませう。

# テンプレートファイル
template_dir = テンプレートが入ってるディレクトリ。最後はやっぱり'/'で。

# 認証config
session_config = 認証設定ファイルをフルパスで
</pre></p><h2 id="h2-.E3.81.A8.E3.82.8A.E3.81.82.E3.81.88.E3.81.9A.E4.BD.9C.E3.81.A3.E3.81.A6.E3.81.BF.E3.82.8B">とりあえず作ってみる</h2><p>適当なmodel基底クラスを継承します。多分、普通ならbase_model、認証系ならbase_model_authってところでしょう。更なる基底としてbase_model_skeletonがありますので、必要に応じてお好みに。<br />
とりあえず(ほぼ)共通する内容なので、まとめて。
</p><h3 id="h3-.E6.9C.80.E4.BD.8E.E9.99.90.E6.AC.B2.E3.81.97.E3.81.84.E5.AE.9F.E8.A3.85">最低限欲しい実装</h3><div class="code"><code><span style="color: #000000">
public&nbsp;function&nbsp;initialize()&nbsp;{&nbsp;&nbsp;}<br />public&nbsp;function&nbsp;finalize()&nbsp;{&nbsp;&nbsp;}<br /></span>
</code></div><p>modelクラスのインスタンスが生成されるタイミング＆破棄されるタイミングでcallされます。再帰callの場合入れ子でcallされます。…が、まず確定で「処理必要ない」と思います。<br />
基底クラスでabstract宣言してるので、実装だけはしておいてください。
</p><div class="code"><code><span style="color: #000000">
public&nbsp;function&nbsp;execute()<br />public&nbsp;function&nbsp;execute_auth()<br /></span>
</code></div><p>このどちらかのメソッド(名前みれば一目瞭然ですが、authついてるほうが認証系です)がいわゆる「マウントポイント」になります。ので、処理はこのメソッドを起点にしてください。
</p><p>で、実際必要なのはこのインスタンス内で持ってるエトセトラだと思うので、いくつかかいつまんで。
</p><h3 id="h3-.E3.83.AA.E3.82.AF.E3.82.A8.E3.82.B9.E3.83.88.E6.83.85.E5.A0.B1.28.E5.85.A5.E5.8A.9B.E6.83.85.E5.A0.B1.29.E3.81.AE.E3.81.A8.E3.82.8A.E3.81.8B.E3.81.9F">リクエスト情報(入力情報)のとりかた</h3><p>$_POSTとか$_GETとか、あまつさえ$_REQUESTなどを生でcallするのは厳禁です。厳禁ですったら厳禁です(理由は省略。とりあえず、magic_quoteとロギング関連と文字コードという単語から適宜妄想してください)。
</p><p>上述のリクエストはすべて、cgi_requestクラスがまかないます。とりあえず
<div class="code"><code><span style="color: #000000">
$req&nbsp;=&nbsp;$this-&gt;get_cgi_request();<br /></span>
</code></div>でインスタンスをげとった後、
<div class="code"><code><span style="color: #000000">
$s&nbsp;=&nbsp;$req-&gt;find(cgiでの名前);<br />$array&nbsp;=&nbsp;$req-&gt;find_array(cgiでの名前);<br /></span>
</code></div>などで適宜情報をげとってください。cookieもこのインスタンスから取得できます。
</p><h3 id="h3-DB.E3.83.8F.E3.83.B3.E3.83.89.E3.83.AB">DBハンドル</h3><div class="code"><code><span style="color: #000000">
$dbh&nbsp;=&nbsp;$this-&gt;get_db();<br /></span>
</code></div><p>でどうぞ。あとは、このハンドルにqueryとかいうメソッドを使うと簡単にDBにアクセスできます。<br />
なお、基本的には「model内でダイレクトにSQL書くのは厳禁」です。そーゆー処理はクラスに弾いてラッピングしておきませう。
</p><h3 id="h3-.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.82.A8.E3.83.B3.E3.82.B8.E3.83.B3">テンプレートエンジン</h3><p>CONV使用前提です。で、
<div class="code"><code><span style="color: #000000">
$conv&nbsp;=&nbsp;$this-&gt;get_conv();<br /></span>
</code></div>こげな感じ。
</p><h3 id="h3-.E3.83.A6.E3.83.BC.E3.82.B6ID.E3.81.AE.E5.8F.96.E5.BE.97">ユーザIDの取得</h3><p>auth限定ですが。
<div class="code"><code><span style="color: #000000">
$id&nbsp;=&nbsp;$this-&gt;get_id();<br /></span>
</code></div>でユーザIDが取得できます。
</p><h3 id="h3-.E9.9B.91.E3.81.AA.E5.87.BA.E5.8A.9B.E4.BE.9D.E9.A0.BC">雑な出力依頼</h3><ul><li>get_convで取得したconvインスタンスに対して設定をした
</li></ul><p>前提であれば、
<div class="code"><code><span style="color: #000000">
$this-&gt;make_body_with_conv(テンプレートファイル名);<br /></span>
</code></div>で、あと一通り処理してくれます。
</p><h3 id="h3-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E6.83.85.E5.A0.B1.E5.91.A8.E3.82.8A">セッション情報周り</h3><p>hiddenはとりあえず(ほぼ)論外として。<br />
セッション情報は、session_dataクラスからの派生クラス(普通はsession_data_dbクラス)を使って格納してください。
</p><div class="code"><code><span style="color: #000000">
require_once("session_data_db.inc");<br />&nbsp;&nbsp;$sb&nbsp;=&nbsp;new&nbsp;session_data_db;<br />&nbsp;&nbsp;$sb-&gt;set_db(DBハンドル);<br />&nbsp;&nbsp;$sb-&gt;set_id(個人が特定できるようなID);<br /></span>
</code></div><p>が大前提。直前にデータがある可能性があれば、この後で
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sb-&gt;read()；<br /></span>
</code></div>ユニークであることを気にしたければ
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sb-&gt;fix_session();<br /></span>
</code></div>もしユニークじゃない(==すでに存在してた)らfalse帰ってくるから。
</p><p>データは
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sb-&gt;add("name1","value1-1");<br /></span>
</code></div>で突っ込んで、最後
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sb-&gt;write();<br /></span>
</code></div>で書き込み。
</p><p>使い終わったら行儀よく
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sb-&gt;del();<br /></span>
</code></div>しておきませう。
</p><h3 id="h3-.E3.82.BB.E3.82.AD.E3.83.A5.E3.83.AA.E3.83.86.E3.82.A3.E5.91.A8.E3.82.8A">セキュリティ周り</h3><p>SQLを(万が一)手で作るときは、sql_utilまたは最低でもsecurityクラスを使ってきちんとエスケープ処理をしてください。<br />
convに出力用置換データを渡すときもsecurityクラスでのエスケープを忘れずに(これは、後でsecurity_convとか作るかもしれないですが)。
</p><h2 id="h2-.E3.81.A1.E3.82.87.E3.81.A3.E3.81.A8.E5.AE.9F.E8.B7.B5.EF.BC.9A.E5.85.A5.E5.8A.9B-.3E.E7.A2.BA.E8.AA.8D-.3E.E5.AE.8C.E4.BA.86">ちょっと実践：入力-&gt;確認-&gt;完了</h2><h3 id="h3-.E3.81.BE.E3.81.9Aclump.E3.82.92.E7.94.A8.E6.84.8F.E3.81.99.E3.82.8B">まずclumpを用意する</h3><p>data_clumpの派生クラス…ではなくて。data_clump_valudatorの派生クラスを用意します。<br />
自力で書くのもありですが。ぶっちゃけ、junk box <a href="http://www.gjmj.net/" class="external" rel="nofollow">http://www.gjmj.net/</a> にある data_clump_validator作成 <a href="http://www.gjmj.net/make_clump.php" class="external" rel="nofollow">http://www.gjmj.net/make_clump.php</a> 使うほうが楽かもです。<br />
フォロー必要ならコメントよろしく(笑<br />
端的に書くと「validatorもしてくれるclump」です。そのまんま。
</p><p>現状実装してるtypeは<br />
any             種類問わず<br />
alphanum        英数字<br />
numeric         数値：minとmaxの意味合いが変わる<br />
email           email<br />
url             URL<br />
digit           数字<br />
dir             ディレクトリ<br />
くらい。
</p><p>alpha           英字<br />
alpha_lower     英小文字<br />
alpha_upper     英大文字<br />
xdigit          16進数の数字<br />
tel<br />
jzip            日本の郵便番号<br />
については実装する…かもしれない。ので、欲しい人は挙手。
</p><h3 id="h3-.E3.83.86.E3.83.B3.E3.83.97.E3.83.AC.E3.83.BC.E3.83.88.E3.82.92.E6.BA.96.E5.82.99.E3.81.99.E3.82.8B.E3.80.82">テンプレートを準備する。</h3><p>完了はともかく、入力と確認はそこそこ面倒。特に入力画面は「エラー画面兼任」なので厄介。<br />
厄介なら自動化ってことで validator_util_with_conv で使えるテンプレ自動作成 <a href="http://www.gjmj.net/make_template.php" class="external" rel="nofollow">http://www.gjmj.net/make_template.php</a> をどんぞ。
</p><p>以下メモ。
性別　&lt;INPUT type=&quot;radio&quot; name=&quot;customer_sex&quot; value=&quot;***sex:1***&quot;&gt;男
　&lt;INPUT type=&quot;radio&quot; name=&quot;customer_sex&quot; value=&quot;***sex:1***&quot;&gt;女&lt;br&gt;
</p><p>チェックボックスも似たような書式。
</p><p>都道府県はjunk boxにしまってある。
</p><h3 id="h3-.E3.80.8C.E5.85.A5.E5.8A.9B.E7.94.BB.E9.9D.A2.E5.87.BA.E5.8A.9Bmodel.E3.80.8D.E4.BD.9C.E6.88.90.E3.81.AE.EF.BC.91">「入力画面出力model」作成の１</h3><p>base_model(素)なりbase_model_auth(認証必須)なりbase_model_ambiguous(認証してもしなくても)なり、それぞれのwith_mobileなりを適宜継承。
</p><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$tmp_name&nbsp;=&nbsp;"てんぷれのファイル名";<br />&nbsp;&nbsp;$conv&nbsp;=&nbsp;new&nbsp;f_conv;<br /><br />&nbsp;&nbsp;//&nbsp;出力<br />&nbsp;&nbsp;$this-&gt;make_body_with_conv($tmp_name);<br /></span>
</code></div><p>中身はとりあえずこんなもん。ここまでで一回test。エラーつぶして。mapfileとか書き忘れてない？ 大丈夫？
</p><h3 id="h3-.E3.80.8C.E7.A2.BA.E8.AA.8D.E7.94.BB.E9.9D.A2.E5.87.BA.E5.8A.9Bmodel.E3.80.8D.E4.BD.9C.E6.88.90.E3.81.AE.EF.BC.91">「確認画面出力model」作成の１</h3><p>テンプレはjunk boxで作れるので。単純にまずは遷移できることを確認。
</p><h3 id="h3-.E3.80.8C.E7.A2.BA.E8.AA.8D.E7.94.BB.E9.9D.A2.E5.87.BA.E5.8A.9Bmodel.E3.80.8D.E4.BD.9C.E6.88.90.E3.81.AE.EF.BC.92.EF.BD.9E.E4.BB.8A.E5.BA.A6.E3.81.AF.E3.83.81.E3.82.A7.E3.83.83.E3.82.AF.E3.81.A0.EF.BC.81.EF.BC.81">「確認画面出力model」作成の２～今度はチェックだ！！</h3><p>XXX
</p><p>入力チェック。validator_util_with_convのcheckメソッドで。
</p><p>突っ返すときは$convにはすでに情報入ってるしbag機能で持ちまわれるので
</p><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$this-&gt;recursive_on();<br />&nbsp;&nbsp;$this-&gt;set_recursive_command(つっかえすコマンド多分input);<br />&nbsp;&nbsp;//<br />&nbsp;&nbsp;return&nbsp;;<br /></span>
</code></div><p>で。
</p><p>以下書いてない orz</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AF%E3%83%A9%E3%83%B3%E3%83%97%E8%AA%AC%E6%98%8E%E6%9B%B8">
    <title>データクランプ説明書</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E3%82%AF%E3%83%A9%E3%83%B3%E3%83%97%E8%AA%AC%E6%98%8E%E6%9B%B8</link>
    <dc:identifier>データクランプ説明書</dc:identifier>
    <dc:date>2008-09-03T16:22:34+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= data clumpとは
大雑把に言うと「あるデータの塊を一意に扱う」ためのクラスです。とりあえず「１塊 == DBの１テーブル」であると認識していただいて差し支えはまったくありません。[[BR]]
この特徴のため、いわゆる「O/Rマッパー」的な側面があります。[[BR]]

== とりあえず大雑把に準備
=== classファイルを作る
何は]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-data.20clump.E3.81.A8.E3.81.AF">data clumpとは</a>
<ol><li><a href="#h2-.E3.81.A8.E3.82.8A.E3.81.82.E3.81.88.E3.81.9A.E5.A4.A7.E9.9B.91.E6.8A.8A.E3.81.AB.E6.BA.96.E5.82.99">とりあえず大雑把に準備</a>
<ol><li><a href="#h3-class.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E4.BD.9C.E3.82.8B">classファイルを作る</a>
</li><li><a href="#h3-.E5.BF.85.E8.A6.81.E3.81.AA.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E3.81.A8.E5.87.A6.E7.90.86.E3.82.92.E3.81.B6.E3.81.A1.E3.81.93.E3.82.80">必要なメソッドと処理をぶちこむ</a>
</li></ol></li><li><a href="#h2-.E4.BD.BF.E3.81.84.E6.96.B9.E5.9F.BA.E6.9C.AC">使い方基本</a>
<ol><li><a href="#h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E4.B8.80.E5.BC.8F.E3.80.81CGI.E3.83.87.E3.83.BC.E3.82.BF.E3.81.8B.E3.82.89.E5.8F.97.E3.81.91.E5.8F.96.E3.82.8B">データを一式、CGIデータから受け取る</a>
</li><li><a href="#h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E4.B8.80.E5.BC.8F.E3.80.81DB.E3.81.8B.E3.82.89.E5.8F.97.E3.81.91.E5.8F.96.E3.82.8B">データを一式、DBから受け取る</a>
</li><li><a href="#h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.81.AB.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.99.E3.82.8B.28read.29">data_clump内の情報にアクセスする(read)</a>
</li><li><a href="#h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E5.A4.89.E6.9B.B4.E3.81.99.E3.82.8B.28write.29">data_clump内の情報を変更する(write)</a>
</li><li><a href="#h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.AB.E4.BF.9D.E5.AD.98.E3.81.99.E3.82.8B">data_clump内の情報をセッションテーブルに保存する</a>
</li><li><a href="#h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.8B.E3.82.89.E5.8F.96.E3.82.8A.E5.87.BA.E3.81.99">data_clump内の情報をセッションテーブルから取り出す</a>
</li><li><a href="#h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E4.B8.80.E5.BC.8F.E8.A1.A8.E7.A4.BA.E3.81.99.E3.82.8B.28conv.E7.94.A8.29">data_clump内の情報を一式表示する(conv用)</a>
</li><li><a href="#h3-del.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E3.81.AE.E5.A6.99.E6.8A.80.28.E7.AC.91">delメソッドの妙技(笑</a>
</li></ol></li><li><a href="#h2-.E5.8D.98.E4.BD.93.E3.81.A7.E5.BF.9C.E7.94.A8">単体で応用</a>
<ol><li><a href="#h3-set_to_all_conv.E3.81.AB.E8.BF.BD.E8.A8.98">set_to_all_convに追記</a>
</li><li><a href="#h3-is_valid.E3.81.AB.E8.BF.BD.E8.A8.98">is_validに追記</a>
</li><li><a href="#h3-.E3.81.8A.E4.BE.BF.E5.88.A9.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89">お便利メソッド</a>
</li></ol></li><li><a href="#h2-.E6.9C.AC.E6.A0.BC.E7.9A.84.E3.81.AA.E5.BF.9C.E7.94.A8.E7.B7.A8">本格的な応用編</a>
<ol><li><a href="#h3-loop.E7.94.A8.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">loop用データの作り方</a>
</li><li><a href="#h3-.E3.81.84.E3.82.8F.E3.82.86.E3.82.8B.E3.80.8C.E5.85.A5.E5.8A.9B.20-.3E.20.E7.A2.BA.E8.AA.8D.20-.3E.20.E5.AE.8C.E4.BA.86.E3.80.8D.E3.81.AB.E3.81.8A.E3.81.91.E3.82.8B.E6.A5.BD.E3.81.AA.E4.BD.BF.E3.81.84.E6.96.B9">いわゆる「入力 -&gt; 確認 -&gt; 完了」における楽な使い方</a>
</li><li><a href="#h3-.E8.A4.87.E6.95.B0.E3.81.AE.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.AB.E5.80.A4.E3.81.8C.E3.81.BE.E3.81.9F.E3.81.8C.E3.82.8B.E5.A0.B4.E5.90.88">複数のテーブルに値がまたがる場合</a>
</li></ol></li><li><a href="#h2-.E7.8F.BE.E5.9C.A8.E6.9C.AA.E5.AE.9F.E8.A3.85.E3.81.AA.E4.BB.8A.E5.BE.8C.E4.BA.88.E5.AE.9A">現在未実装な今後予定</a>
<ol><li><a href="#h3-.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E5.90.8D.E3.81.AB.E3.82.88.E3.81.A3.E3.81.A6.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.99.E3.82.8BDB.E3.82.92.E5.88.87.E3.82.8A.E6.9B.BF.E3.81.88.E3.82.8B">テーブル名によってアクセスするDBを切り替える</a>
</li><li><a href="#h3-ID.E3.81.AE.E5.80.A4.E3.81.AB.E3.82.88.E3.81.A3.E3.81.A6.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.99.E3.82.8B.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E5.90.8D.E3.82.92.E5.88.87.E3.82.8A.E6.9B.BF.E3.81.88.E3.82.8B">IDの値によってアクセスするテーブル名を切り替える</a>
</li></ol></li></ol></li></ol></div>
<h1 id="h1-data.20clump.E3.81.A8.E3.81.AF">data clumpとは</h1><p>大雑把に言うと「あるデータの塊を一意に扱う」ためのクラスです。とりあえず「１塊 == DBの１テーブル」であると認識していただいて差し支えはまったくありません。<br />
この特徴のため、いわゆる「O/Rマッパー」的な側面があります。<br />
</p><h2 id="h2-.E3.81.A8.E3.82.8A.E3.81.82.E3.81.88.E3.81.9A.E5.A4.A7.E9.9B.91.E6.8A.8A.E3.81.AB.E6.BA.96.E5.82.99">とりあえず大雑把に準備</h2><h3 id="h3-class.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.82.92.E4.BD.9C.E3.82.8B">classファイルを作る</h3><p>何はともあれclassを作成して扱ってみましょう。<br />
まずファイルの格納先ですが。どこでもいいんですが、個人的には libディレクトリ内に clumpというディレクトリを切って。clump系のクラスはすべてそこに突っ込むようにしています。だってわかりやすいしｗ
</p><p>概ね「テーブル名_clump」というクラス名にする事が多いのですが(混乱がない)、まぁその辺はお好きに。<br />
各classは、data_clump、もしくはdata_clump_validatorのいずれかの継承クラスとして作成してください。以下、説明は全て「data_clump_validatorを継承した」前提で執筆します。
</p><h3 id="h3-.E5.BF.85.E8.A6.81.E3.81.AA.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E3.81.A8.E5.87.A6.E7.90.86.E3.82.92.E3.81.B6.E3.81.A1.E3.81.93.E3.82.80">必要なメソッドと処理をぶちこむ</h3><p>とりあえず。ほぼ定型処理として以下を入れてください。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;public&nbsp;function&nbsp;__construct()<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;//$this-&gt;init();<br />&nbsp;&nbsp;&nbsp;&nbsp;parent::__construct();<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;public&nbsp;function&nbsp;init()<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;parent::init();<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;set_element();<br />&nbsp;&nbsp;}<br /></span>
</code></div>これで、initのタイミングで「必要な情報を設定する」ようにし向けます。<br />
続いて、set_elementメソッドを実行します。基本的に外から呼ばれる事はないはずなので、protectedにしておきます。中では、「データの要素の指定」と「validateの指定」を行います。<br />
…うんえとねこの辺、YAMLだのXMLだので設定ファイル、とか、コードジェネレータとか、考えてるですが…やってません orz
</p><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;/**<br />&nbsp;&nbsp;&nbsp;*&nbsp;基本的な情報の設定<br />&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;*&nbsp;テーブル名およびカラム名を設定する<br />&nbsp;&nbsp;&nbsp;*<br />&nbsp;&nbsp;&nbsp;*&nbsp;@access&nbsp;protected<br />&nbsp;&nbsp;&nbsp;*/<br />&nbsp;&nbsp;protected&nbsp;function&nbsp;set_element()<br />&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;テーブル名の設定<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;set_table_name('team_topic_res');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;要素の設定<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;$inname,&nbsp;$cginame,&nbsp;$tmpname,&nbsp;$dbname,&nbsp;$keyflg<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;push_element('res_id','','','','pk');<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;push_element('topic_id',&nbsp;'',&nbsp;'',&nbsp;'',&nbsp;'');<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;push_element('client_id',&nbsp;'',&nbsp;'',&nbsp;'',&nbsp;'');<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;push_element('comment',&nbsp;'',&nbsp;'',&nbsp;'',&nbsp;'');<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;push_element('write_date',&nbsp;'',&nbsp;'',&nbsp;'',&nbsp;'');<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;validate項目とvalidateの仕方の設定<br />&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;$name,&nbsp;$type,&nbsp;$must&nbsp;=&nbsp;false,&nbsp;$min&nbsp;=&nbsp;-1,&nbsp;$max&nbsp;=&nbsp;-1<br />&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;make_validate('comment',&nbsp;'any',&nbsp;true,&nbsp;-1,&nbsp;500);<br />&nbsp;&nbsp;}<br /></span>
</code></div><p>こんな感じです以上…では切ないので色々と。<br />
</p><h4 id="h4-.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E5.90.8D.E3.81.AE.E8.A8.AD.E5.AE.9A">テーブル名の設定</h4><p>set_table_nameはまぁそのまんま。ここうまく使うとちょいと面白い事が出来るですが(大規模なんかで「IDのhash値でテーブル名分ける」とかね)、とりあえずは素直にストレートに。<br />
「デフォルトとして、class名から&quot;_clump&quot;を削除した値」って事も想定はしましたが、現状実装はしてません。<br />
</p><h4 id="h4-.E8.A6.81.E7.B4.A0.E3.81.AE.E8.A8.AD.E5.AE.9A">要素の設定</h4><p>とりあえずdata_clumpの最大級の眼目の場所。簡単に書くと「内部呼称とHTML内のINPUTエレメントのnameアトリビュート値とDBのカラム名とテンポラリテーブル(セッションテーブル)に格納するときの一時的な名前と、あとはプライマリキーであるかどうか」を一気に指定していきます。いやまぁなんていうかほぼそのまんま。<br />
基本手でごりごり書いていくですが。一応、<br />
</p><ul><li><a href="http://www.gjmj.net/make_clump.php" class="external" rel="nofollow">http://www.gjmj.net/make_clump.php</a>
</li><li><a href="http://www.gjmj.net/make_all_form.php" class="external" rel="nofollow">http://www.gjmj.net/make_all_form.php</a>
</li></ul><p>なんてのが、運が良ければ、作成の…0.5助くらいにはなる、かも…しれません。多分。あるいは。もしかしたら。<br />
ちなみに。空文字の場合のデフォルトは「内部呼称(inname)の値」。特に問題がなければ、一緒にしちゃって良いように思われます。気になる人や問題がある人は個々に設定してください。
</p><h4 id="h4-validate.E9.A0.85.E7.9B.AE.E3.81.AE.E8.A8.AD.E5.AE.9A.28data.5Cclump_validator.E5.9B.BA.E6.9C.89.29">validate項目の設定(data\clump_validator固有)</h4><p>チェック項目用のListです。データの形、必須か否か、最大値、最小値がそれぞれ指定できます(ぢつはもうちょっと柔軟に出来るのですがそれは後ほど)。<br />
データの形は、validator_clump というclassにそのまんま依存しています。で、原稿書いている 2008/09/02 現在。
</p><ul><li>alphanum : 英数字
</li><li>numeric : 数値
</li><li>digit : 数字
</li><li>email : email
</li><li>url : URL
</li><li>dir : ディレクトリ名使用可能文字
</li><li>date : 日付
</li><li>any : なんでも(つまり形チェックはしない)
</li></ul><p>に対応しています。いやまぁisクラス書きゃ対応追加は容易なので…要望はお早めにｗ<br />
なお。数字と数値は「文字か値か」の違いです。具体的にはmaxとminの指定で差異が発生します。<br />
</p><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;make_validate('age',&nbsp;'numeric',&nbsp;true,&nbsp;0,&nbsp;120);<br /></span>
</code></div><p>は０歳から120歳までをフォローしますが、万が一これで
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;&nbsp;&nbsp;$this-&gt;make_validate('age',&nbsp;'digit',&nbsp;true,&nbsp;0,&nbsp;120);<br /></span>
</code></div>とやると、０桁から120桁までの数字を許容範囲とします。…とりあえず人間の寿命ぢゃねぇです(笑
</p><h2 id="h2-.E4.BD.BF.E3.81.84.E6.96.B9.E5.9F.BA.E6.9C.AC">使い方基本</h2><p>以下、model(base_modelとかその系列)の継承クラスのexecute系メソッド内で使う事を想定しています。<br />
そうでない場合は、適宜かみ砕いて都合良く読み替えたり脳内置換したり脳内補完したりしてください。<br />
また、以下「hoge_clump」というクラス名で説明をしていきます。
</p><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E4.B8.80.E5.BC.8F.E3.80.81CGI.E3.83.87.E3.83.BC.E3.82.BF.E3.81.8B.E3.82.89.E5.8F.97.E3.81.91.E5.8F.96.E3.82.8B">データを一式、CGIデータから受け取る</h3><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;cgiリクエストが詰まったオブジェクト取ってくる<br />&nbsp;&nbsp;$req&nbsp;=&nbsp;$this-&gt;get_cgi_request();<br /><br />&nbsp;&nbsp;//&nbsp;hogeクラスを「にゅ～」<br />&nbsp;&nbsp;$hobj&nbsp;=&nbsp;new&nbsp;hoge_clump();<br />&nbsp;&nbsp;$hobj-&gt;set_from_cgi($req);<br /></span>
</code></div><p>いぢょ。これで、clumpクラス内にデータががっつり入りました。
</p><h3 id="h3-.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E4.B8.80.E5.BC.8F.E3.80.81DB.E3.81.8B.E3.82.89.E5.8F.97.E3.81.91.E5.8F.96.E3.82.8B">データを一式、DBから受け取る</h3><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;DBハンドル取ってくる<br />&nbsp;&nbsp;$dbh&nbsp;=&nbsp;$this-&gt;get_db();<br /><br />&nbsp;&nbsp;//&nbsp;hogeクラスを「にゅ～」<br />&nbsp;&nbsp;$hobj&nbsp;=&nbsp;new&nbsp;hoge_clump();<br />&nbsp;&nbsp;$hobj-&gt;set_db($dbh);<br />&nbsp;&nbsp;$hobj-&gt;set_value('key',&nbsp;$key,&nbsp;false);<br />&nbsp;&nbsp;$ret&nbsp;=&nbsp;$hobj-&gt;get();<br /></span>
</code></div><p>これで「keyというカラムが$keyな値であるデータをDBからいただいてきて腹ん中に修める」事が出来ます。<br />
このパターンだと「プライマリキーとして指定したものでしかWHERE出来ません」が。例えば「今回は email という値から検索したいなぁ」なんて時は
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;DBハンドル取ってくる<br />&nbsp;&nbsp;$dbh&nbsp;=&nbsp;$this-&gt;get_db();<br /><br />&nbsp;&nbsp;//&nbsp;hogeクラスを「にゅ～」<br />&nbsp;&nbsp;$hobj&nbsp;=&nbsp;new&nbsp;hoge_clump();<br />&nbsp;&nbsp;$hobj-&gt;set_db($dbh);<br />&nbsp;&nbsp;$hobj-&gt;set_value('email',&nbsp;$email,&nbsp;false);<br />&nbsp;&nbsp;$ret&nbsp;=&nbsp;$hobj-&gt;get_nopk();<br /></span>
</code></div>という感じで、つまりは「get_nopkメソッド」をご利用ください。<br />
いずれの場合も、$retにfalseが帰ってきた場合、何らかのエラーが発生して情報が取れない事を意味します。
</p><h3 id="h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.81.AB.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.99.E3.82.8B.28read.29">data_clump内の情報にアクセスする(read)</h3><p>ごくごくシンプルですが。get_valueメソッドを使います。<br />
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$email&nbsp;=&nbsp;$hobj-&gt;get_value('email');<br /></span>
</code></div></p><h3 id="h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E5.A4.89.E6.9B.B4.E3.81.99.E3.82.8B.28write.29">data_clump内の情報を変更する(write)</h3><p>set_valueを使うのですが…ここはちょいと色々と。<br />
O/Rマッパ的要素があるために。set_valueは、呼び方というか引数一つで「DBと連動したりしなかったり」します。<br />
ちょいとその辺の要素を分解整理してみましょう。
</p><p>まず。「getやget_nopkをcallするために、keyを指定するset_value」では、当然ながら「DBと連動しちゃ困ります」。<br />
なので、この手の用途の時には、第3引数に明示的にfalseを指定します。前述してるソースですが、今回はset_valueを中心に眺めてみてください。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;DBハンドル取ってくる<br />&nbsp;&nbsp;$dbh&nbsp;=&nbsp;$this-&gt;get_db();<br /><br />&nbsp;&nbsp;//&nbsp;hogeクラスを「にゅ～」<br />&nbsp;&nbsp;$hobj&nbsp;=&nbsp;new&nbsp;hoge_clump();<br />&nbsp;&nbsp;$hobj-&gt;set_db($dbh);<br />&nbsp;&nbsp;$hobj-&gt;set_value('email',&nbsp;$email,&nbsp;false);<br />&nbsp;&nbsp;$ret&nbsp;=&nbsp;$hobj-&gt;get_nopk();<br /></span>
</code></div></p><p>つぎ。getしたりget_nopkした時の値変更ですが。…これも二種類ありまして。<br />
基本的には「Object内のデータが変わったら連動するようにDBの値も変わって欲しい」ので。その場合、第3引数にtrueを設定します。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$hobj-&gt;set_value('counter',&nbsp;$counter,&nbsp;true);<br /></span>
</code></div>ただ。仕様的に「１つの値ごとにUPDATEがSQLとして流れる」ので。複数の値を変更するときは、以下のような書き方もありです。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$hobj-&gt;set_value('counter',&nbsp;$counter,&nbsp;false);<br />&nbsp;&nbsp;$hobj-&gt;set_value('hogera',&nbsp;$hogera,&nbsp;false);<br />&nbsp;&nbsp;$hobj-&gt;set_value('mugera',&nbsp;$mugera,&nbsp;false);<br />&nbsp;&nbsp;$hobj-&gt;update();<br /></span>
</code></div>この場合、updateのタイミングでupdate文が走ります。
</p><p>おまけ。CGI Requestデータから情報をげとってそのままDBに格納する場合、
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;DBハンドル取ってくる<br />&nbsp;&nbsp;$dbh&nbsp;=&nbsp;$this-&gt;get_db();<br />&nbsp;&nbsp;//&nbsp;cgiリクエストが詰まったオブジェクト取ってくる<br />&nbsp;&nbsp;$req&nbsp;=&nbsp;$this-&gt;get_cgi_request();<br /><br />&nbsp;&nbsp;//&nbsp;hogeクラスを「にゅ～」<br />&nbsp;&nbsp;$hobj&nbsp;=&nbsp;new&nbsp;hoge_clump();<br />&nbsp;&nbsp;$hobj-&gt;set_from_cgi($req);<br /><br />&nbsp;&nbsp;//&nbsp;データ突っ込む<br />&nbsp;&nbsp;$hobj-&gt;set_db($dbh);<br />&nbsp;&nbsp;$hobj-&gt;insert();<br /></span>
</code></div>こんな風に書くと一撃です。
</p><h3 id="h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.AB.E4.BF.9D.E5.AD.98.E3.81.99.E3.82.8B">data_clump内の情報をセッションテーブルに保存する</h3><p>いわゆる「入力 -&gt; 確認 -&gt; 完了」なんかの時に便利ですね。基本はこんな感じで。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;データ突っ込む<br />&nbsp;&nbsp;$hobj-&gt;set_to_tmp();<br /></span>
</code></div>この場合
</p><ul><li>session_data_dbクラスをnew
</li><li>set_tmp_keyされていればそれを(推奨)、されていなければトークナイザでkeyを作成(非推奨)
</li><li>set_session_table_nameで設定されていればそのテーブル名に対して。設定されていなければデフォルトであるsession_dataテーブルに
</li><li>まず上述の情報から、セッションテーブルをread
</li><li>全データを各要素ごとにadd_once
</li><li>write
</li></ul><p>というロジックになります。<br />
ただ。「すでに手持ちにあるセッションオブジェクトに入れて～」というケースもあるので。その場合
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;データ突っ込む<br />&nbsp;&nbsp;$hobj-&gt;set_to_tmp($お手持ちのセッションオブジェクト);<br /></span>
</code></div>とすると、お手持ちのセッションオブジェクトにぶち込んでくれます。
</p><h3 id="h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.8B.E3.82.89.E5.8F.96.E3.82.8A.E5.87.BA.E3.81.99">data_clump内の情報をセッションテーブルから取り出す</h3><p>概ね、set_to_tmpと一緒です。つまり、通常は
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;データげと<br />&nbsp;&nbsp;$hobj-&gt;set_from_tmp();<br /></span>
</code></div>お手持ち指定なら
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;データげと<br />&nbsp;&nbsp;$hobj-&gt;set_from_tmp($お手持ちのセッションオブジェクト);<br /></span>
</code></div>となるわけです。
</p><h3 id="h3-data_clump.E5.86.85.E3.81.AE.E6.83.85.E5.A0.B1.E3.82.92.E4.B8.80.E5.BC.8F.E8.A1.A8.E7.A4.BA.E3.81.99.E3.82.8B.28conv.E7.94.A8.29">data_clump内の情報を一式表示する(conv用)</h3><p>convインスタンスはmodelクラスから取得できるので、って前提で、こうなります。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;convインスタンス取ってくる<br />&nbsp;&nbsp;$conv&nbsp;=&nbsp;$this-&gt;get_conv();<br /><br />&nbsp;&nbsp;//&nbsp;設定<br />&nbsp;&nbsp;$hobj-&gt;set_all_to_conv($conv);<br /></span>
</code></div>なお。convがf_convクラスだろうがsecure_convクラスだろうが、その辺まで判定したうえで「エスケープ処理して」設定します。現状「非エスケープ項目」については考えてません。<br />
また、現状は未対応ですが、多分、Smarty対応もします。必要なら声かけてくださいませ。<br />
なお、convの単置換子名(またはSmartyの場合変数名)は、inname(普段get_valueとかで使う値)と一緒です。
</p><h3 id="h3-del.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E3.81.AE.E5.A6.99.E6.8A.80.28.E7.AC.91">delメソッドの妙技(笑</h3><p>ちょいと話が飛びますが。<br />
DBのkeyには、自然キーと人工キーという二種類があります。リレーショナルデータベース、という数学論としては「自然キー」を推奨しているのですが、例えばOracleとか、その辺の製品を扱っている、いわゆるデータベースエンジニアとかいう方々は、人工キーを推している事が多いようです。<br />
まぁ善し悪しって話はおいておくのですが。<br />
個人的には、やはり「候補キー」と呼称されるタプル群がいくつかあってその中の一つを「主キーにする」というのが、大変にきれいであるように感じられます。<br />
</p><p>別の観点として。<br />
いわゆる「デリートフラグ」とかってやつですが。…あれがtrue(削除された)ってデータが増えると、テーブルが太るんですよね。ちょっと気になるところです。<br />
</p><p>等々、の観点から。<br />
MWでは「デリートキーをonにする論理削除ではなく、レコードそのものを物理削除するほうを推奨する」方向で考えています。<br />
ってのを踏まえて。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;削除<br />&nbsp;&nbsp;$hobj-&gt;del();<br /></span>
</code></div>いぢょ…で片付いたら妙技でもなんでもありませんがな。
</p><p>ここからが、妙技。
</p><p>まず。「テーブル名 ＋ '_delete'」というテーブルを用意してください(この辺、prefixにするかsuffixにするか、また付け加える文字列については可変予定です)。<br />
しかる後にdelメソッドを。
</p><p>するとなんと不思議。本体テーブルから削除されて、_deleteテーブルに同じ情報がinsertされています。
ちなみに_deleteテーブルは「主キー設定をしない」「元テーブル＋'delete_date'というタプル」という構成が好ましいですっていうかそれ前提です。
</p><p>これであれば。<br />
例えば「emailは重複させたくないからuniquではじきたい」とかそういった「真っ当なDBの使い方」が割と簡単にできるようになります。
</p><h2 id="h2-.E5.8D.98.E4.BD.93.E3.81.A7.E5.BF.9C.E7.94.A8">単体で応用</h2><p>今までの説明でも概ね使えるのですが。さらにより一層「お便利に使う」ための一助としてのご提案です。
</p><h3 id="h3-set_to_all_conv.E3.81.AB.E8.BF.BD.E8.A8.98">set_to_all_convに追記</h3><p>例えば現状。CONVで、いわゆる「単置換」しかサポートしていないです。言い換えると。typeがtextだったりtextareaだったりするとよいのですが、これがradioだったりselectだったりすると、どうしても個別ロジックが必要になります。
</p><p>また、確認画面では「selectで得られた値」ではなくて「selectで得られた値から導き出される文字列」になる事も多々。
</p><p>そんな時の、ぶっちゃけご提案的Tipsです。
</p><p>まず。convでいうところのconv_util::monoDicCheckedなどは。data_clump継承クラス内に作成します。<br />
概ね、こんな感じで。
<div class="code"><code><span style="color: #000000">
public&nbsp;function&nbsp;set_all_to_conv($conv)<br />{<br />&nbsp;&nbsp;//&nbsp;まずは親call<br />&nbsp;&nbsp;parent::set_all_to_conv($conv);<br /><br />&nbsp;&nbsp;//&nbsp;で、個別処理<br />&nbsp;&nbsp;conv_util::monoDicChecked...<br />}<br /></span>
</code></div>さらに。前述したように「selectで選んだコードに対応する文字列を確認画面で出したい」なんてケースは。
</p><ul><li>name + '_value'に値を入れる(nameが'select_one'なら、その値は'select_one_value'に入る)
</li></ul><p>なんてルールを決めた上で、同じくset_all_to_convメソッド内に記述してしまえば便利です。
</p><h3 id="h3-is_valid.E3.81.AB.E8.BF.BD.E8.A8.98">is_validに追記</h3><p>これもset_all_to_convと全く同様で。個別にmodelとかに散らかすのではなく、clumpクラス内に集約して持っておくようにしましょう。
</p><h3 id="h3-.E3.81.8A.E4.BE.BF.E5.88.A9.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89">お便利メソッド</h3><p>二点ご紹介。
</p><p>いち。
</p><p>「トークナイザつかってユニークなIDを与えたい」なんてケースは多々。この場合
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$hobj-&gt;set_value_token(カラム名,&nbsp;false);<br /></span>
</code></div>で設定出来ます。第二引数のfalseは、普段のset_valueの第三引数と同じ意味です。
</p><p>に。
</p><p>「今この瞬間の日付を入れたい」ってのが以下略。同様に
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$hobj-&gt;set_value_nowdate(カラム名,&nbsp;false);<br /></span>
</code></div>で片付きます…が、日付の場合、一つ注意点。
</p><p>「最低限きちんとntpで時刻あわせをしておきましょう」。
</p><p>よく「DBの側の日付を取得」と言いますしそれは正論なのですが。それも「DBサーバを複数台にした」瞬間に同じ問題が発生するので。<br />
まずは「きちんとntpで時刻あわせをする」事を意識しましょう。
</p><h2 id="h2-.E6.9C.AC.E6.A0.BC.E7.9A.84.E3.81.AA.E5.BF.9C.E7.94.A8.E7.B7.A8">本格的な応用編</h2><p>で…ある意味ここが真骨頂。がつりんといってみましょう。
</p><h3 id="h3-loop.E7.94.A8.E3.83.87.E3.83.BC.E3.82.BF.E3.81.AE.E4.BD.9C.E3.82.8A.E6.96.B9">loop用データの作り方</h3><h3 id="h3-.E3.81.84.E3.82.8F.E3.82.86.E3.82.8B.E3.80.8C.E5.85.A5.E5.8A.9B.20-.3E.20.E7.A2.BA.E8.AA.8D.20-.3E.20.E5.AE.8C.E4.BA.86.E3.80.8D.E3.81.AB.E3.81.8A.E3.81.91.E3.82.8B.E6.A5.BD.E3.81.AA.E4.BD.BF.E3.81.84.E6.96.B9">いわゆる「入力 -&gt; 確認 -&gt; 完了」における楽な使い方</h3><h3 id="h3-.E8.A4.87.E6.95.B0.E3.81.AE.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E3.81.AB.E5.80.A4.E3.81.8C.E3.81.BE.E3.81.9F.E3.81.8C.E3.82.8B.E5.A0.B4.E5.90.88">複数のテーブルに値がまたがる場合</h3><h2 id="h2-.E7.8F.BE.E5.9C.A8.E6.9C.AA.E5.AE.9F.E8.A3.85.E3.81.AA.E4.BB.8A.E5.BE.8C.E4.BA.88.E5.AE.9A">現在未実装な今後予定</h2><h3 id="h3-.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E5.90.8D.E3.81.AB.E3.82.88.E3.81.A3.E3.81.A6.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.99.E3.82.8BDB.E3.82.92.E5.88.87.E3.82.8A.E6.9B.BF.E3.81.88.E3.82.8B">テーブル名によってアクセスするDBを切り替える</h3><h3 id="h3-ID.E3.81.AE.E5.80.A4.E3.81.AB.E3.82.88.E3.81.A3.E3.81.A6.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E3.81.99.E3.82.8B.E3.83.86.E3.83.BC.E3.83.96.E3.83.AB.E5.90.8D.E3.82.92.E5.88.87.E3.82.8A.E6.9B.BF.E3.81.88.E3.82.8B">IDの値によってアクセスするテーブル名を切り替える</h3>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E7%A9%BA%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%A7%E4%BC%9A%E5%93%A1%E7%99%BB%E9%8C%B2%E6%90%BA%E5%B8%AF%E7%B7%A8">
    <title>空メールで会員登録携帯編</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E7%A9%BA%E3%83%A1%E3%83%BC%E3%83%AB%E3%81%A7%E4%BC%9A%E5%93%A1%E7%99%BB%E9%8C%B2%E6%90%BA%E5%B8%AF%E7%B7%A8</link>
    <dc:identifier>空メールで会員登録携帯編</dc:identifier>
    <dc:date>2008-06-22T17:06:22+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

=  空メールで会員登録携帯編

== まづは空メールを打っていただきませう
んと。ぶっちゃけここは「静的なHTML」で結構ざます。適当なメアドを表示してください。[[BR]]
とりあえず&hellip; member_add@domain.com とかいう名前にしてみませう。

== 空メール受信周りの処理と設定
=== smtpd側の設定
]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E7.A9.BA.E3.83.A1.E3.83.BC.E3.83.AB.E3.81.A7.E4.BC.9A.E5.93.A1.E7.99.BB.E9.8C.B2.E6.90.BA.E5.B8.AF.E7.B7.A8">空メールで会員登録携帯編</a>
<ol><li><a href="#h2-.E3.81.BE.E3.81.A5.E3.81.AF.E7.A9.BA.E3.83.A1.E3.83.BC.E3.83.AB.E3.82.92.E6.89.93.E3.81.A3.E3.81.A6.E3.81.84.E3.81.9F.E3.81.A0.E3.81.8D.E3.81.BE.E3.81.9B.E3.81.86">まづは空メールを打っていただきませう</a>
</li><li><a href="#h2-.E7.A9.BA.E3.83.A1.E3.83.BC.E3.83.AB.E5.8F.97.E4.BF.A1.E5.91.A8.E3.82.8A.E3.81.AE.E5.87.A6.E7.90.86.E3.81.A8.E8.A8.AD.E5.AE.9A">空メール受信周りの処理と設定</a>
<ol><li><a href="#h3-smtpd.E5.81.B4.E3.81.AE.E8.A8.AD.E5.AE.9A">smtpd側の設定</a>
</li><li><a href="#h3-.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.81.A3.E3.81.A6.E3.81.84.E3.81.86.E3.81.8Bconfig.E5.81.B4.E3.81.AE.E8.A8.AD.E5.AE.9A">プログラムっていうかconfig側の設定</a>
</li><li><a href="#h3-.E3.83.90.E3.83.83.E3.83.81.E3.81.AE.E5.AE.9F.E9.9A.9B">バッチの実際</a>
</li></ol></li><li><a href="#h2-.E3.83.88.E3.83.BC.E3.82.AF.E3.83.B3.E4.BB.98.E3.81.8DURI.E3.82.92.E5.8F.97.E4.BF.A1.E3.81.97.E3.81.9F.E3.81.82.E3.81.9F.E3.82.8A.E3.81.A7.E3.81.AE.E5.87.A6.E7.90.86">トークン付きURIを受信したあたりでの処理</a>
</li><li><a href="#h2-.E8.AC.9D.E7.BD.AA.E4.BA.8B.E9.A0.85">謝罪事項</a>
</li></ol></li></ol></div>
<h1 id="h1-.E7.A9.BA.E3.83.A1.E3.83.BC.E3.83.AB.E3.81.A7.E4.BC.9A.E5.93.A1.E7.99.BB.E9.8C.B2.E6.90.BA.E5.B8.AF.E7.B7.A8">空メールで会員登録携帯編</h1><h2 id="h2-.E3.81.BE.E3.81.A5.E3.81.AF.E7.A9.BA.E3.83.A1.E3.83.BC.E3.83.AB.E3.82.92.E6.89.93.E3.81.A3.E3.81.A6.E3.81.84.E3.81.9F.E3.81.A0.E3.81.8D.E3.81.BE.E3.81.9B.E3.81.86">まづは空メールを打っていただきませう</h2><p>んと。ぶっちゃけここは「静的なHTML」で結構ざます。適当なメアドを表示してください。<br />
とりあえず… member_add@domain.com とかいう名前にしてみませう。
</p><h2 id="h2-.E7.A9.BA.E3.83.A1.E3.83.BC.E3.83.AB.E5.8F.97.E4.BF.A1.E5.91.A8.E3.82.8A.E3.81.AE.E5.87.A6.E7.90.86.E3.81.A8.E8.A8.AD.E5.AE.9A">空メール受信周りの処理と設定</h2><h3 id="h3-smtpd.E5.81.B4.E3.81.AE.E8.A8.AD.E5.AE.9A">smtpd側の設定</h3><p>まず「メールが届いたらそのままプログラム起動してstdinにメールのstring渡すよ」な設定をします。<br />
大抵の場合、/etc/aliases あたりになります。書式としては
<pre>メアドのlocal-pert: | 起動したいプログラム
</pre>って感じです。今回は
<pre>member_add: | &quot;/usr/local/bin/php /opt/www/hogeramugera/batch/member_add.php&quot;
</pre>としておきましょう。phpのパスは自分で調べてね。
</p><h3 id="h3-.E3.83.97.E3.83.AD.E3.82.B0.E3.83.A9.E3.83.A0.E3.81.A3.E3.81.A6.E3.81.84.E3.81.86.E3.81.8Bconfig.E5.81.B4.E3.81.AE.E8.A8.AD.E5.AE.9A">プログラムっていうかconfig側の設定</h3><p>まずはconfig.confに「このファイル使って処理よろ」という設定を。
<pre># 会員登録用
member_add = /opt/www/hogeramugera/conf/member_add_config.conf
</pre>当然ながら、左辺値のお名前はなんでもいいんだけどね。下記のバッチのconfig-&gt;findのところとずれると動かないので要注意。<br />
んでもってconfig自体の内容はこんな感じ。
<pre># 登録用空メールごにょごにょのconfig

# insertするDBのtable名
table_name = empty_mail_cushion_member_add

# 暗号化用config
crypt_config_name = /opt/www/hogeramugera/conf/mail_crypt.conf

# メールテンプレート
mail_template = /opt/www/hogeramugera/template/mail/member_add.tpl

# from アドレス
from = admin@hogeramugera.com
from_name = hogeramugera_admin

# タイトル
subject = 新規会員登録
</pre>概ねわかると思うんだけど、ポイントは「暗号化用config」。トークンを暗号化するので、そのための設定。…とりあえず下記コピペしてｗ
<pre># 今のところ MCRYPT_RIJNDAEL_256 だけ
type = MCRYPT_RIJNDAEL_256

# cbc, ecb, cfb, ofb, nofb
block_mode = cbc

# secret key(32文字まで)
key = 半角で適当な文字列入れといて
</pre>通常の暗号化用の設定ファイルと書式は一緒。<br />
そうそうメールテンプレートのサンプルはこんなげ。
<pre>以下のURIをクリックすると登録が完了します。

http://hogeramugera.com/index.php?c=add_fin&amp;guid=on&amp;i=%%%token%%%
</pre>i=％％％token％％％が絶対に必須で(別にi=ぢゃなくていいんだけど)、最低限これがあればOK。<br />
guid=onなのかuid＝NULLGWDOCOMOなのかは自分で判断してっていうか公式ぢゃなけれguidにしといて当然だけど。
</p><h3 id="h3-.E3.83.90.E3.83.83.E3.83.81.E3.81.AE.E5.AE.9F.E9.9A.9B">バッチの実際</h3><p>身も蓋もなくざくりと。
</p><p>base.inc<br />
MWとconfigファイルの場所の設定。index.phpでも使うので一回外だし。
<div class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;MWを使えるようにする<br /></span><span style="color: #007700">require_once(</span><span style="color: #DD0000">'/opt/www/MW/mw.conf'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;configファイルの場所を設定<br /></span><span style="color: #0000BB">$config&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'/opt/www/hogeramugera/conf/config.conf'</span><span style="color: #007700">;<br /></span>
</span>
</code></div></p><p>cron_base.inc<br />
cronの時に使う、configとDBのインスタンスをとりあえず作っとく。
<div class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//<br /></span><span style="color: #007700">require_once(</span><span style="color: #DD0000">'base.inc'</span><span style="color: #007700">);<br />require_once(</span><span style="color: #DD0000">'config.inc'</span><span style="color: #007700">);<br />require_once(</span><span style="color: #DD0000">'db_manager.inc'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//<br /></span><span style="color: #0000BB">$cobj&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">config</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$cobj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;dbh<br /></span><span style="color: #0000BB">$dbh&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">db_manager</span><span style="color: #007700">::</span><span style="color: #0000BB">get_handle</span><span style="color: #007700">(&nbsp;</span><span style="color: #0000BB">$cobj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">find</span><span style="color: #007700">(</span><span style="color: #DD0000">'db_config_path'</span><span style="color: #007700">)&nbsp;);<br /></span>
</span>
</code></div></p><p>実処理。
member_add.php
<div class="code"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">require_once(</span><span style="color: #DD0000">'/opt/www/htdocs/hogeramugera/cron_base.inc'</span><span style="color: #007700">);<br />require_once(</span><span style="color: #DD0000">'empty_mail_cushion.inc'</span><span style="color: #007700">);<br /><br /></span><span style="color: #FF8000">//&nbsp;メールクッションクラス<br /></span><span style="color: #0000BB">$obj&nbsp;</span><span style="color: #007700">=&nbsp;new&nbsp;</span><span style="color: #0000BB">empty_mail_cushion</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_db</span><span style="color: #007700">(</span><span style="color: #0000BB">$dbh</span><span style="color: #007700">);<br /></span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">set_config_filename</span><span style="color: #007700">(</span><span style="color: #0000BB">$cobj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">find</span><span style="color: #007700">(</span><span style="color: #DD0000">'member_add'</span><span style="color: #007700">));<br /><br /></span><span style="color: #FF8000">//&nbsp;処理<br /></span><span style="color: #0000BB">$obj</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">run</span><span style="color: #007700">();<br /></span>
</span>
</code></div></p><h2 id="h2-.E3.83.88.E3.83.BC.E3.82.AF.E3.83.B3.E4.BB.98.E3.81.8DURI.E3.82.92.E5.8F.97.E4.BF.A1.E3.81.97.E3.81.9F.E3.81.82.E3.81.9F.E3.82.8A.E3.81.A7.E3.81.AE.E5.87.A6.E7.90.86">トークン付きURIを受信したあたりでの処理</h2><p>最低限必要なのは…
<div class="code"><code><span style="color: #000000">
require_once('empty_mail_cushion.inc');<br /></span>
</code></div>あとは…例えば「こんな風にかけば～」な参考例。<br />
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;//&nbsp;iが無いときの処理<br />&nbsp;&nbsp;//&nbsp;XXX&nbsp;とりあえず有り得ないので雑に<br />&nbsp;&nbsp;$i&nbsp;=&nbsp;$req-&gt;find('i');<br />&nbsp;&nbsp;if&nbsp;(""&nbsp;===&nbsp;$i)&nbsp;{<br />print&nbsp;"error&nbsp;(i&nbsp;is&nbsp;empty)&nbsp;\n";<br />exit;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;//&nbsp;uidが取れないときの処理<br />&nbsp;&nbsp;$uid&nbsp;=&nbsp;$this-&gt;get_id();<br />&nbsp;&nbsp;if&nbsp;(""&nbsp;===&nbsp;$uid)&nbsp;{<br />print&nbsp;"error&nbsp;(uid&nbsp;is&nbsp;empty)&nbsp;\n";<br />exit;<br />&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;//&nbsp;メアドげとって<br />&nbsp;&nbsp;$obj&nbsp;=&nbsp;new&nbsp;empty_mail_cushion;<br />&nbsp;&nbsp;$obj-&gt;set_db($dbh);<br />&nbsp;&nbsp;$obj-&gt;set_config_filename($this-&gt;get_config()-&gt;find('member_add'));<br /><br />&nbsp;&nbsp;//&nbsp;多分本当はこう<br />&nbsp;&nbsp;//$obj-&gt;get_なんりゃら($req-&gt;find('i'));<br />&nbsp;&nbsp;//$email&nbsp;=&nbsp;$obj-&gt;get_email();<br />&nbsp;&nbsp;$email&nbsp;=&nbsp;$obj-&gt;get_email($req-&gt;find('i'));<br /></span>
</code></div>ここまでで「uidっていうかいわゆるiモードIDとかサブスクライバIDとかの類」と「emailアドレス」が紐尽くざんす。<br />
あとはてけとうにDBにでも突っ込んでおくんなまし。
</p><h2 id="h2-.E8.AC.9D.E7.BD.AA.E4.BA.8B.E9.A0.85">謝罪事項</h2><p>emptyで使う一時テーブル、現状削除ロジック書いてないんだよねぇ orz<br />
ごめんそのうち書くからしばらくの間は適当にお掃除君入れてあげてくださいませ orz</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AE%E4%BF%9D%E6%8C%81%E3%81%AE%E4%BB%95%E6%96%B9">
    <title>セッション情報の保持の仕方</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E6%83%85%E5%A0%B1%E3%81%AE%E4%BF%9D%E6%8C%81%E3%81%AE%E4%BB%95%E6%96%B9</link>
    <dc:identifier>セッション情報の保持の仕方</dc:identifier>
    <dc:date>2008-05-13T04:34:38+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

=  セッション情報の保持の仕方

== 前提として
んと。基本的にはユーザIDの類をkeyにするのですが(携帯だとサブスクライバIDの類使ったりもします)。[[BR]]
ぶっちゃけ制限緩いので。必ずしも「１ユーザ１セッションデータ」とは限りません。[[BR]]
まぁ使い方みて何となく想像してくんなまし。

== セッションの使い方：初手
とり]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E6.83.85.E5.A0.B1.E3.81.AE.E4.BF.9D.E6.8C.81.E3.81.AE.E4.BB.95.E6.96.B9">セッション情報の保持の仕方</a>
<ol><li><a href="#h2-.E5.89.8D.E6.8F.90.E3.81.A8.E3.81.97.E3.81.A6">前提として</a>
</li><li><a href="#h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E5.88.9D.E6.89.8B">セッションの使い方：初手</a>
</li><li><a href="#h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E3.81.B6.E3.81.A1.E8.BE.BC.E3.82.80">セッションの使い方：データをぶち込む</a>
</li><li><a href="#h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E6.8E.A2.E3.81.99">セッションの使い方：データを探す</a>
</li><li><a href="#h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E6.9B.B8.E3.81.8D.E8.BE.BC.E3.82.80">セッションの使い方：データを書き込む</a>
</li></ol></li></ol></div>
<h1 id="h1-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E6.83.85.E5.A0.B1.E3.81.AE.E4.BF.9D.E6.8C.81.E3.81.AE.E4.BB.95.E6.96.B9">セッション情報の保持の仕方</h1><h2 id="h2-.E5.89.8D.E6.8F.90.E3.81.A8.E3.81.97.E3.81.A6">前提として</h2><p>んと。基本的にはユーザIDの類をkeyにするのですが(携帯だとサブスクライバIDの類使ったりもします)。<br />
ぶっちゃけ制限緩いので。必ずしも「１ユーザ１セッションデータ」とは限りません。<br />
まぁ使い方みて何となく想像してくんなまし。
</p><h2 id="h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E5.88.9D.E6.89.8B">セッションの使い方：初手</h2><p>とりあえず、何はともあれここは必須。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sed_obj&nbsp;=&nbsp;new&nbsp;session_data_db;<br />&nbsp;&nbsp;$sed_obj-&gt;set_db($this-&gt;get_db());<br />&nbsp;&nbsp;$sed_obj-&gt;set_id($this-&gt;get_uid());<br /></span>
</code></div>ポイントはset_idメソッド。通常uidそのまま使ったりするですが。例えばここにprefixだのsuffixだのをうまく用いると、１ユーザでも様々なセッションデータもてたりします。<br />
無意味にやっても混乱するだけですが。上手にサイトを分離出来てたりすると色々便利だったりもするので。頭の片隅で「ふぅんそんな機能もあるんだぁ」くらいに覚えておいてください。<br />
<br />
で。大抵の場合「今までの情報を引き継ぐ」必要があるので
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sed_obj-&gt;read();<br /></span>
</code></div>とやって以前の情報を引っ張り出します。すっかり忘れるとすっきりと消え去るので要注意。
</p><h2 id="h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E3.81.B6.E3.81.A1.E8.BE.BC.E3.82.80">セッションの使い方：データをぶち込む</h2><p>基本的には「どんどん追加」と「同一のkeyがあるんなら上書き」の２種類。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sed_obj-&gt;add($key,&nbsp;$value);<br />&nbsp;&nbsp;$sed_obj-&gt;add_once($key,&nbsp;$value);<br /></span>
</code></div>どっちがどっちかはわかるよね？ once付いてるほうが「同一のkeyがあるなら上書き」だからね？
</p><h2 id="h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E6.8E.A2.E3.81.99">セッションの使い方：データを探す</h2><div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$s&nbsp;=&nbsp;$sed_obj-&gt;find($key);<br />&nbsp;&nbsp;$array&nbsp;=&nbsp;$sed_obj-&gt;find_array($key);<br /></span>
</code></div><p>前者が単値、後者が配列でデータを探します。<br />
ちなみに。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sed_obj-&gt;erase_key($key);<br />&nbsp;&nbsp;$key_array&nbsp;=&nbsp;$sed_obj-&gt;get_all_keys();<br /></span>
</code></div>なんてのもあったり。前者はkey値指定の削除、後者は「今ある全keyリスト」の取得。<br />
key値指定無しで全削除したいときは
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sed_obj-&gt;init();<br /></span>
</code></div>で終わり。よござんすか？ よござんすね？
</p><h2 id="h2-.E3.82.BB.E3.83.83.E3.82.B7.E3.83.A7.E3.83.B3.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9.EF.BC.9A.E3.83.87.E3.83.BC.E3.82.BF.E3.82.92.E6.9B.B8.E3.81.8D.E8.BE.BC.E3.82.80">セッションの使い方：データを書き込む</h2><p>これやらないと「DBに反映されない」で切ない思いをするので注意。
<div class="code"><code><span style="color: #000000">
&nbsp;&nbsp;$sed_obj-&gt;write();<br /></span>
</code></div>OK？</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/conv%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D">
    <title>conv覚え書き</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/conv%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D</link>
    <dc:identifier>conv覚え書き</dc:identifier>
    <dc:date>2007-12-26T23:21:21+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= conv覚え書き

== convってなに？
置換エンジン。Smartyの代用品だと思ってください。

Smartyはちと個人的に「多機能に過ぎて」トラブルに遭いやすいので。convを普段は使っています。手持ちのクラスのなかでも、ルーツが格段に古いモノの一つです(1999年の７月とか８月とかにCで作成したのが源流)。

== 使い方は？
執]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-conv.E8.A6.9A.E3.81.88.E6.9B.B8.E3.81.8D">conv覚え書き</a>
<ol><li><a href="#h2-conv.E3.81.A3.E3.81.A6.E3.81.AA.E3.81.AB.EF.BC.9F">convってなに？</a>
</li><li><a href="#h2-.E4.BD.BF.E3.81.84.E6.96.B9.E3.81.AF.EF.BC.9F">使い方は？</a>
</li><li><a href="#h2-.E3.81.8A.E4.BE.BF.E5.88.A9.E3.81.8F.E3.82.93.E3.81.9F.E3.81.A1">お便利くんたち</a>
<ol><li><a href="#h3-cgi.E5.85.A5.E5.8A.9B.E3.81.A7.E5.85.A5.E5.8A.9B.E3.82.A8.E3.83.A9.E3.83.BC.E3.81.A8.E3.81.8B.E7.A2.BA.E8.AA.8D.E7.94.BB.E9.9D.A2.E3.81.A8.E3.81.8B.E3.81.A7.E4.B8.80.E5.BC.8F.E8.A1.A8.E7.A4.BA.E3.81.99.E3.82.8B.E3.81.A8.E3.81.8D.E7.94.A8.E3.81.AE.E3.82.82.E3.81.AE.E3.81.90.E3.81.95.E3.82.AF.E3.83.A9.E3.82.B9">cgi入力で入力エラーとか確認画面とかで一式表示するとき用のものぐさクラス</a>
</li></ol></li></ol></li></ol></div>
<h1 id="h1-conv.E8.A6.9A.E3.81.88.E6.9B.B8.E3.81.8D">conv覚え書き</h1><h2 id="h2-conv.E3.81.A3.E3.81.A6.E3.81.AA.E3.81.AB.EF.BC.9F">convってなに？</h2><p>置換エンジン。Smartyの代用品だと思ってください。
</p><p>Smartyはちと個人的に「多機能に過ぎて」トラブルに遭いやすいので。convを普段は使っています。手持ちのクラスのなかでも、ルーツが格段に古いモノの一つです(1999年の７月とか８月とかにCで作成したのが源流)。
</p><h2 id="h2-.E4.BD.BF.E3.81.84.E6.96.B9.E3.81.AF.EF.BC.9F">使い方は？</h2><p>執筆中
</p><p>テンプレート記述についても書いておかないとねぇ。
</p><h2 id="h2-.E3.81.8A.E4.BE.BF.E5.88.A9.E3.81.8F.E3.82.93.E3.81.9F.E3.81.A1">お便利くんたち</h2><h3 id="h3-cgi.E5.85.A5.E5.8A.9B.E3.81.A7.E5.85.A5.E5.8A.9B.E3.82.A8.E3.83.A9.E3.83.BC.E3.81.A8.E3.81.8B.E7.A2.BA.E8.AA.8D.E7.94.BB.E9.9D.A2.E3.81.A8.E3.81.8B.E3.81.A7.E4.B8.80.E5.BC.8F.E8.A1.A8.E7.A4.BA.E3.81.99.E3.82.8B.E3.81.A8.E3.81.8D.E7.94.A8.E3.81.AE.E3.82.82.E3.81.AE.E3.81.90.E3.81.95.E3.82.AF.E3.83.A9.E3.82.B9">cgi入力で入力エラーとか確認画面とかで一式表示するとき用のものぐさクラス</h3><p>「とりあえず入力値一式テンプレートに設定したい」なんて時に便利。
</p><div class="code"><code><span style="color: #000000">
require_once('conv_util.inc');<br />&nbsp;//&nbsp;とりあえずrequest情報一式突っ込む<br />&nbsp;//&nbsp;XXX&nbsp;持ち上げられそう？<br />&nbsp;$sp&nbsp;=&nbsp;new&nbsp;simple_request_put;<br />&nbsp;$sp-&gt;set_conv($conv);<br />&nbsp;$sp-&gt;set_request($req);<br />&nbsp;$sp-&gt;set();<br /></span>
</code></div>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/clump%E7%B3%BB%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D">
    <title>clump系覚え書き</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/clump%E7%B3%BB%E8%A6%9A%E3%81%88%E6%9B%B8%E3%81%8D</link>
    <dc:identifier>clump系覚え書き</dc:identifier>
    <dc:date>2007-12-26T23:16:26+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= clump系覚え書き

== clump系ってなに？
旧来「data_clump」と呼称されていたクラスから上下に派生したクラス群です。[[BR]]
哲学の根幹は「データをひとかたまりにして扱う」というものになります。構造体とかいうなｗ

== 使い方は？
執筆中

set_from_cgi、set_to_tmp、set_from_tmp]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-clump.E7.B3.BB.E8.A6.9A.E3.81.88.E6.9B.B8.E3.81.8D">clump系覚え書き</a>
<ol><li><a href="#h2-clump.E7.B3.BB.E3.81.A3.E3.81.A6.E3.81.AA.E3.81.AB.EF.BC.9F">clump系ってなに？</a>
</li><li><a href="#h2-.E4.BD.BF.E3.81.84.E6.96.B9.E3.81.AF.EF.BC.9F">使い方は？</a>
</li><li><a href="#h2-.E3.81.A9.E3.81.86.E3.81.9B.E3.81.AA.E3.82.89validation.E3.82.82">どうせならvalidationも</a>
</li></ol></li></ol></div>
<h1 id="h1-clump.E7.B3.BB.E8.A6.9A.E3.81.88.E6.9B.B8.E3.81.8D">clump系覚え書き</h1><h2 id="h2-clump.E7.B3.BB.E3.81.A3.E3.81.A6.E3.81.AA.E3.81.AB.EF.BC.9F">clump系ってなに？</h2><p>旧来「data_clump」と呼称されていたクラスから上下に派生したクラス群です。<br />
哲学の根幹は「データをひとかたまりにして扱う」というものになります。構造体とかいうなｗ
</p><h2 id="h2-.E4.BD.BF.E3.81.84.E6.96.B9.E3.81.AF.EF.BC.9F">使い方は？</h2><p>執筆中
</p><p>set_from_cgi、set_to_tmp、set_from_tmp、set_to_dbがひとつ。
</p><p>set_data＆get_dataが一つ。
</p><p>あとお便利君達。
</p><h2 id="h2-.E3.81.A9.E3.81.86.E3.81.9B.E3.81.AA.E3.82.89validation.E3.82.82">どうせならvalidationも</h2><p>まずdata_clump_validateクラスの継承で作る。
</p><p>しかる後に
</p><div class="code"><code><span style="color: #000000">
&nbsp;//&nbsp;validator<br />&nbsp;//&nbsp;&nbsp;$cobjはclump_validate継承のインスタンス。<br />require_once('validator_util_with_conv.inc');<br />&nbsp;$vobj&nbsp;=&nbsp;new&nbsp;validator_util_with_conv;<br />&nbsp;$vobj-&gt;push_clump('custorer',&nbsp;$cobj);<br />&nbsp;$vobj-&gt;set_conv($conv);<br />&nbsp;$ret&nbsp;=&nbsp;$vobj-&gt;is_valid();<br /></span>
</code></div><p>Smarty版は………作る？
</p><p>作るならついでに、conv_utilと同様のsmarty_util作ると便利かも。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E8%8D%89%E6%A1%88">
    <title>インストール方法草案</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E6%96%B9%E6%B3%95%E8%8D%89%E6%A1%88</link>
    <dc:identifier>インストール方法草案</dc:identifier>
    <dc:date>2007-12-24T23:04:35+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= インストール方法

== そのマシンにMWをinstallする時に一回だけ処理
適当なファイル～例えば&quot;/etc/framwork/mw.conf&quot;とか&quot;/opt/www/mw.conf&quot;とか～に以下の内容のファイルを作成します。

{{{

&lt;?php
// Frame workのクラスが一式]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E6.96.B9.E6.B3.95">インストール方法</a>
<ol><li><a href="#h2-.E3.81.9D.E3.81.AE.E3.83.9E.E3.82.B7.E3.83.B3.E3.81.ABMW.E3.82.92install.E3.81.99.E3.82.8B.E6.99.82.E3.81.AB.E4.B8.80.E5.9B.9E.E3.81.A0.E3.81.91.E5.87.A6.E7.90.86">そのマシンにMWをinstallする時に一回だけ処理</a>
</li></ol></li></ol></div>
<h1 id="h1-.E3.82.A4.E3.83.B3.E3.82.B9.E3.83.88.E3.83.BC.E3.83.AB.E6.96.B9.E6.B3.95">インストール方法</h1><h2 id="h2-.E3.81.9D.E3.81.AE.E3.83.9E.E3.82.B7.E3.83.B3.E3.81.ABMW.E3.82.92install.E3.81.99.E3.82.8B.E6.99.82.E3.81.AB.E4.B8.80.E5.9B.9E.E3.81.A0.E3.81.91.E5.87.A6.E7.90.86">そのマシンにMWをinstallする時に一回だけ処理</h2><p>適当なファイル～例えば&quot;/etc/framwork/mw.conf&quot;とか&quot;/opt/www/mw.conf&quot;とか～に以下の内容のファイルを作成します。
</p><pre>
&lt;?php
// Frame workのクラスが一式インストールされてる場所
$dir = &quot;/usr/src/MW/&quot;;
set_include_path(get_include_path() . &quot;:&quot; . $dir);
</pre><p>あとは、mw.confのファイルの「絶対パス」だけ、開発者に周知しておいていただければOKです。
</p><p>開発者的には、上述ファイルをrequire_onceすれば、<a href="http://sourceforge.jp/projects/magicweapon/wiki/MagicWeapon">MagicWeapon</a>のクラスは一通り使えます。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88">
    <title>使い方の提案</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E4%BD%BF%E3%81%84%E6%96%B9%E3%81%AE%E6%8F%90%E6%A1%88</link>
    <dc:identifier>使い方の提案</dc:identifier>
    <dc:date>2007-12-03T19:13:59+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= 単体でもお便利編

== cgi_requestクラス
データの取得はcgi_requestインスタンスを使ってください。

面倒な色々がずいぶんと減ると思いますんで。

== 日付周り(calendarクラス)
calendarクラスで色々できます。是非覗いてやってください。

結構楽なのは「文字列を取り込むset_stringメソッ]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E5.8D.98.E4.BD.93.E3.81.A7.E3.82.82.E3.81.8A.E4.BE.BF.E5.88.A9.E7.B7.A8">単体でもお便利編</a>
<ol><li><a href="#h2-cgi_request.E3.82.AF.E3.83.A9.E3.82.B9">cgi_requestクラス</a>
</li><li><a href="#h2-.E6.97.A5.E4.BB.98.E5.91.A8.E3.82.8A.28calendar.E3.82.AF.E3.83.A9.E3.82.B9.29">日付周り(calendarクラス)</a>
</li><li><a href="#h2-tokenizer.E3.82.AF.E3.83.A9.E3.82.B9">tokenizerクラス</a>
</li><li><a href="#h2-config.E3.82.AF.E3.83.A9.E3.82.B9">configクラス</a>
</li><li><a href="#h2-is.E3.82.AF.E3.83.A9.E3.82.B9">isクラス</a>
</li><li><a href="#h2-log.E3.82.AF.E3.83.A9.E3.82.B9">logクラス</a>
</li><li><a href="#h2-security.E3.82.AF.E3.83.A9.E3.82.B9">securityクラス</a>
</li><li><a href="#h2-conv.E3.82.AF.E3.83.A9.E3.82.B9">convクラス</a>
</li><li><a href="#h2-csv.E3.82.AF.E3.83.A9.E3.82.B9">csvクラス</a>
</li></ol></li></ol></div>
<h1 id="h1-.E5.8D.98.E4.BD.93.E3.81.A7.E3.82.82.E3.81.8A.E4.BE.BF.E5.88.A9.E7.B7.A8">単体でもお便利編</h1><h2 id="h2-cgi_request.E3.82.AF.E3.83.A9.E3.82.B9">cgi_requestクラス</h2><p>データの取得はcgi_requestインスタンスを使ってください。
</p><p>面倒な色々がずいぶんと減ると思いますんで。
</p><h2 id="h2-.E6.97.A5.E4.BB.98.E5.91.A8.E3.82.8A.28calendar.E3.82.AF.E3.83.A9.E3.82.B9.29">日付周り(calendarクラス)</h2><p>calendarクラスで色々できます。是非覗いてやってください。
</p><p>結構楽なのは「文字列を取り込むset_stringメソッド」とか「日付を加減算出来るメソッド」とか。
</p><h2 id="h2-tokenizer.E3.82.AF.E3.83.A9.E3.82.B9">tokenizerクラス</h2><p>いわゆる「ユニークなトークン」が必要なときに鬼便利です。
</p><p>特に何か無ければ
<pre>tokenizer::get()
</pre></p><p>で簡単に「ユニークなトークン」が作成していただけます。
</p><h2 id="h2-config.E3.82.AF.E3.83.A9.E3.82.B9">configクラス</h2><p>いわゆる「name = value」形式なら簡単に読み込めます。
１カラム目が＃の時はちゃんとコメントアウトと見なしてくれます。
</p><h2 id="h2-is.E3.82.AF.E3.83.A9.E3.82.B9">isクラス</h2><p>「これは英文字？」「これはURL？」などの単純な文字列チェックが色々と収められてます。
</p><h2 id="h2-log.E3.82.AF.E3.83.A9.E3.82.B9">logクラス</h2><p>ログがかけます。いやまぁそれだけなのですが…ちょっとしたバリエーション＆スイッチが案外に便利です。
</p><p>具体的には「出力のon/offがメソッド一発」とか。高頻度のログの時は「時間をyyy/mm/ddではなくエポックタイムで書く」のも案外に効果的だったりします。
</p><h2 id="h2-security.E3.82.AF.E3.83.A9.E3.82.B9">securityクラス</h2><p>とりあえず、最低限のエスケープくらいは「たしなみ」ってもんです。
</p><h2 id="h2-conv.E3.82.AF.E3.83.A9.E3.82.B9">convクラス</h2><p>テンプレートエンジンです。機能は簡素ですが、それ故のメリットも色々。
</p><h2 id="h2-csv.E3.82.AF.E3.83.A9.E3.82.B9">csvクラス</h2><p>簡単かつ的確にCSV情報をパースできます。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E8%AA%8D%E8%A8%BCconfig%E3%81%AE%E6%9B%B8%E5%BC%8F">
    <title>認証configの書式</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E8%AA%8D%E8%A8%BCconfig%E3%81%AE%E6%9B%B8%E5%BC%8F</link>
    <dc:identifier>認証configの書式</dc:identifier>
    <dc:date>2007-12-03T18:10:33+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= 認証configの書式
結構いろいろあるので(制限含めてね)、ちとしっかりと、背景込みで。

{{{
# セッションID用の暗号フォーマット &amp; 鍵
session_crypt_config = /opt/www/conf/admin_session_crypt.conf
}}}
いきなりですが[暗号configの書式]参照で。MWの]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E8.AA.8D.E8.A8.BCconfig.E3.81.AE.E6.9B.B8.E5.BC.8F">認証configの書式</a>
</li></ol></div>
<h1 id="h1-.E8.AA.8D.E8.A8.BCconfig.E3.81.AE.E6.9B.B8.E5.BC.8F">認証configの書式</h1><p>結構いろいろあるので(制限含めてね)、ちとしっかりと、背景込みで。
</p><pre># セッションID用の暗号フォーマット &amp; 鍵
session_crypt_config = /opt/www/conf/admin_session_crypt.conf
</pre><p>いきなりですが<a href="http://sourceforge.jp/projects/magicweapon/wiki/%E6%9A%97%E5%8F%B7config%E3%81%AE%E6%9B%B8%E5%BC%8F">暗号configの書式</a>参照で。MWのセッションは「わざわざ暗号化までしてるから」比較的しぶとい…と思います。<br />
</p><pre># 制限値関連
# パスワードのエラー許容回数
# default 5
pass_error_count = 5
</pre><p>ユーザが「何回までパスワード間違えちゃっても心広く許容してあげるか」の回数です。１とかやるとタイトすぎるので適切な値を設定してください。<br />
一応、デフォルトは５回を想定しています。<br />
これを０(または負の値)にすることで「何回間違えてもロックしない」ようにはできますが、力技でパスワードクラックが可能になるので、可能な限り全力でそんな設定は回避してください。
</p><pre># パスワードエラーでの一時ロック時間：単位は秒
# default 3600(sec) = 1h
pass_error_lock_time = 3600
</pre><p>上述の「pass_error_count」回数間違えると、そのアカウントは一時的にロックされます。そのロック時間をここで設定してください。<br />
極論、ここが数分でもよいです。pass_error_countを無制限にするくらいなら、ここの時間を短くしてください。
</p><pre># セッションの寿命：単位は秒
# default 600(sec) = 5min
session_expire = 600
</pre><p>１セッションあたりの寿命です。言い方を変えると「この時間だけ無操作ならいったんセッション切るからね」な時間です。<br />
デフォルトは結構厳しいですが、長くても数時間の前半が限界じゃないかなぁと個人的には思うのですがどんなもんなんですかね？
</p><pre># session_module_loginにまつわる設定
# login_id_form_name = ログインのときにIDが入ってるformの名前
# login_pass_form_name = ログインのときにpasswordが入ってるformの名前
# login_error_return_command = ログインにしくった時の移動用コマンド名
# login_return_command = ログインに成功した時の移動用コマンド名
login_id_form_name = id
login_pass_form_name = pass
login_error_return_command = index
login_return_command = top
</pre><p>session_module_login.incにあるsession_module_loginクラスを使うときに必要な設定です。<br />
これを適切に設定すると、mapファイルに、IDとパスワードを入力するPageのコマンド設定を
<pre>login = session_module_login.inc:session_module_login
</pre>こんな風にかいておけば、あとは勝手に
</p><ul><li>もしIDとパスワードが無問題ならlogin_return_commandで設定されたPageに移動
</li><li>もしIDとパスワードが問題ありりんならlogin_error_return_commandで設定されたPageに移動
</li></ul><p>を自動的に解決してくれます。<br />
ちなみに微妙Tipsですが。認証後のPageは、base_model_authからの継承クラスにした上で、マウントポイントのメソッド名を通常のexecuteではなくexecute_authにしておくと、簡単に「ログイン後限定のPage」にできます。
</p><pre># session_model_authにまつわる設定
# とはいえ一部はsession_module_loginでも使うんだけどね
# auth_key_cookie = Cookieを使ってkey埋め込むならon  default on
# auth_key_cookie_name = Cookieにkey埋め込むときのname default s
# auth_key_post = postを使ってkey埋め込むならon  default off
# auth_key_post_name = postにkey埋め込むときのname default s
# auth_key_get = GETは基本offだよねぇ？
# auth_error_return_command = 認証NGのときに遷移するコマンド名
auth_key_cookie = on
auth_key_cookie_name = s
auth_key_post = off
auth_key_get = off
auth_error_return_command = index
</pre><p>base_model_authで使います。…内容はコメントに書いてあるくらいで大体通じますよね？(あ、手抜き <br />
注意点としては「auth_key_postがonのときでも別に勝手にhiddenを作ったりはしない」不親切設計なので、そのあたりはmodel側で実装よろ。…とはいえ何か対応はするかもしれないけどもしかしたら。
</p><pre># セッションの寿命が迫ったときの対応方法
# 0:なにもしない（激しく非推奨
# 1:新しいセッションを作成する。古いセッションも寿命までは有効
# 2:新しいセッションを作成する。古いセッションは破棄する
# 3:寿命そのものを伸ばす(非推奨
# default 1
session_expire_flg = 1
</pre><p>コメントそのまま。特に問題なければ１番でよいと思うです。ちなみに１～３の動くタイミングは「TTL(寿命)が半分以下になったとき」。
</p><pre># ログインのときのDBのほうの場所
# とりあえずテーブル構成は「きめうち」する。session_auth_clump.inc読んで。
# ここ自由にしてもしゃぁないっしょ。
#SELECT auth_user.id FROM auth_user WHERE auth_user.id = 'cgi(id)' and auth_user.pass = 'encrypt(cgi(pass))';
# auth_clump = authテーブルのclumpクラスファイル名 : クラス名
# auth_clump_table_name = authテーブルの名前。default auth_user
auth_type = 0
auth_clump = session_auth_clump.inc:session_auth_clump
auth_clump_table_name = auth_admin_user
session_clump_table_name = auth_admin_session
</pre><p>ほぼそのまんま。data_clump使ってるので、そっち系の知識が少し必要かも。
</p><pre># パスワードの暗号種別
# sha-1, md5, 3des, rijndael(256), none
#password_crypt_type = sha-1 | md5 | 3des | rijndael | none
# default sha-1(…でいいかなぁ？) key ハッシュなのもあってdefaultはなし
password_crypt_type = sha-1
</pre><p>パスワードハッシュの種別。とはいえ、md5とかありえないしnoneなんて呪われてしまえ。基本はsha-1。個人的には次点でrijndaelを推したいけど、そのあたりは賛否両論なので微妙。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E6%9A%97%E5%8F%B7config%E3%81%AE%E6%9B%B8%E5%BC%8F">
    <title>暗号configの書式</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E6%9A%97%E5%8F%B7config%E3%81%AE%E6%9B%B8%E5%BC%8F</link>
    <dc:identifier>暗号configの書式</dc:identifier>
    <dc:date>2007-12-03T17:38:47+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= 暗号configの書式
このconfigは、crypt_factoryクラスのget_instanceメソッドに渡す引数のファイルに書かれているものになります。

{{{
# 今のところ MCRYPT_RIJNDAEL_256 だけ
type = MCRYPT_RIJNDAEL_256
}}}
本質的には、typeでは「ブロック暗号方式」を指]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E6.9A.97.E5.8F.B7config.E3.81.AE.E6.9B.B8.E5.BC.8F">暗号configの書式</a>
</li></ol></div>
<h1 id="h1-.E6.9A.97.E5.8F.B7config.E3.81.AE.E6.9B.B8.E5.BC.8F">暗号configの書式</h1><p>このconfigは、crypt_factoryクラスのget_instanceメソッドに渡す引数のファイルに書かれているものになります。
</p><pre># 今のところ MCRYPT_RIJNDAEL_256 だけ
type = MCRYPT_RIJNDAEL_256
</pre><p>本質的には、typeでは「ブロック暗号方式」を指定します。…が、とりあえず現在サポートしてるのはrijndael256だけになりますごめんなさい。<br />
別の暗号の実装は多分そんなにしんどくはないので、必要なら教えてください。List増やします。
</p><pre># cbc, ecb, cfb, ofb, nofb
block_mode = cbc
</pre><p>ブロック暗号モードです。一応いろいろとサポートしてますが、ecbとか設定する人は呪われてください。<br />
迷ったら有無を言わさずcbcにしておくのがとりあえず無難です。
</p><pre># secret key(32文字まで)
key = 暗号キー配列
</pre><p>秘密鍵です。これが漏れたら暗号の意味が根底から覆りますのでご注意のほどを。
このままだとある程度推測が容易な可能性があるので、そのうち、bit単位２進数指定ができるような設定記述を追加する予定です。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/DB%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F">
    <title>DB設定ファイルの書式</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/DB%E8%A8%AD%E5%AE%9A%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F</link>
    <dc:identifier>DB設定ファイルの書式</dc:identifier>
    <dc:date>2007-12-03T17:27:48+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= DB設定ファイルの書式
type=DBの種類(現状、mysqlとpgsqlに対応)[[BR]]
database=DB名[[BR]]
user=接続用のユーザ名[[BR]]
pass=接続用のパスワード[[BR]]
host=DBサーバのIPアドレス。省略するとlocalhost[[BR]]
port=DBサーバの接続ポート。省略すると各DBの]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-DB.E8.A8.AD.E5.AE.9A.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E6.9B.B8.E5.BC.8F">DB設定ファイルの書式</a>
<ol><li><a href="#h2-.E3.82.81.E3.82.82">めも</a>
</li></ol></li></ol></div>
<h1 id="h1-DB.E8.A8.AD.E5.AE.9A.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AE.E6.9B.B8.E5.BC.8F">DB設定ファイルの書式</h1><p>type=DBの種類(現状、mysqlとpgsqlに対応)<br />
database=DB名<br />
user=接続用のユーザ名<br />
pass=接続用のパスワード<br />
host=DBサーバのIPアドレス。省略するとlocalhost<br />
port=DBサーバの接続ポート。省略すると各DBのデフォルトのポート番号<br />
</p><h2 id="h2-.E3.82.81.E3.82.82">めも</h2><p>将来的には複数のDBハンドルとかにも対応してみたいけど、とりあえずシンプルに。</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/map%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F">
    <title>mapファイルの書式</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/map%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E6%9B%B8%E5%BC%8F</link>
    <dc:identifier>mapファイルの書式</dc:identifier>
    <dc:date>2007-12-03T17:24:43+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= mapファイル記法
現状、基本的には以下の形式になります。
{{{
コマンド名 = includeすべきファイル名:newするクラス名
}}}
たとえば、c=topというパラメタを受け取ったときに、common/top.inc内にあるtopというclassをmodelとしてたたきたい場合は
{{{
top = common/top.inc:t]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-map.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E8.A8.98.E6.B3.95">mapファイル記法</a>
<ol><li><a href="#h2-.E7.89.B9.E8.A8.98.EF.BC.91">特記１</a>
</li><li><a href="#h2-.E8.BF.91.E3.80.85.E3.81.AB.E5.9B.9E.E5.8F.8E.E4.BA.88.E5.AE.9A.E3.81.9D.E3.81.AE.EF.BC.91">近々に回収予定その１</a>
</li><li><a href="#h2-.E8.BF.91.E3.80.85.E3.81.AB.E5.9B.9E.E5.8F.8E.E4.BA.88.E5.AE.9A.E3.81.9D.E3.81.AE.EF.BC.92">近々に回収予定その２</a>
</li></ol></li></ol></div>
<h1 id="h1-map.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E8.A8.98.E6.B3.95">mapファイル記法</h1><p>現状、基本的には以下の形式になります。
<pre>コマンド名 = includeすべきファイル名:newするクラス名
</pre>たとえば、c=topというパラメタを受け取ったときに、common/top.inc内にあるtopというclassをmodelとしてたたきたい場合は
<pre>top = common/top.inc:top
</pre>と設定することになります。
</p><h2 id="h2-.E7.89.B9.E8.A8.98.EF.BC.91">特記１</h2><p>パラメタでc=が省略された場合、コマンド名&quot;index&quot;が渡されたものとみなします。
ですので、top pageのコマンド名をindexにしておくといろいろと楽だったり便利だったりします。
</p><h2 id="h2-.E8.BF.91.E3.80.85.E3.81.AB.E5.9B.9E.E5.8F.8E.E4.BA.88.E5.AE.9A.E3.81.9D.E3.81.AE.EF.BC.91">近々に回収予定その１</h2><p>コマンド名とファイル名、クラス名がすべて一致する場合、省略記法ありを考えてます。
具体的には、上述のtopを例にとると
<pre>top = common/:
</pre>ってな省略をOKしようと思ってます。commonまで省略可能な記法も考えてますがまだ思案中です。<br />
いいアイデアあったらよろしく。<br />
多分…
<pre>[dir = common/]
top

# 顧客情報系
[dir = user/]
user_find
user_list
user_detail
</pre>とかって感じになるのかなぁ？
</p><h2 id="h2-.E8.BF.91.E3.80.85.E3.81.AB.E5.9B.9E.E5.8F.8E.E4.BA.88.E5.AE.9A.E3.81.9D.E3.81.AE.EF.BC.92">近々に回収予定その２</h2><p>基本のテンプレートファイル名を列挙できるようにしようと思ってます。
イメージとしては
<pre>top = common/top.inc:top, 正常系テンプレートファイル名, 異常系テンプレートファイル名
</pre>とか
<pre>top = common/:, 正常系テンプレートファイル名, 異常系テンプレートファイル名
</pre>とか
<pre>[dir = common/]
top = , 正常系テンプレートファイル名, 異常系テンプレートファイル名
</pre>とか、かなぁ。
実際には、テンプレートは３つ以上指定可能にする予定。
</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E9%9B%91%E6%96%87%E7%BD%AE%E3%81%8D%E5%A0%B4">
    <title>雑文置き場</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E9%9B%91%E6%96%87%E7%BD%AE%E3%81%8D%E5%A0%B4</link>
    <dc:identifier>雑文置き場</dc:identifier>
    <dc:date>2007-11-05T12:08:58+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= 開発メモ
== ファイルについて
原則は「１ファイル１クラス」。

== 命名について
基本的に「哲学」に由来する名前をつけ、間違っても「機能」に由来する名前はつけない。
なお、クラス名によって明示されている名前については、冗長なのでつけないようにする。
configクラス内において「configファイルの名前を設定する」メソッド

良い]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E9.96.8B.E7.99.BA.E3.83.A1.E3.83.A2">開発メモ</a>
<ol><li><a href="#h2-.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ファイルについて</a>
</li><li><a href="#h2-.E5.91.BD.E5.90.8D.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">命名について</a>
</li><li><a href="#h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E6.A8.A9.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">アクセス権について</a>
</li><li><a href="#h2-final.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6.28Java.E3.80.81PHP.29">finalについて(Java、PHP)</a>
</li><li><a href="#h2-.E4.BE.8B.E5.A4.96.E5.87.A6.E7.90.86.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">例外処理について</a>
</li><li><a href="#h2-.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E5.90.8D.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">メソッド名について</a>
</li><li><a href="#h2-.E3.82.AF.E3.83.A9.E3.82.B9.E5.A4.89.E6.95.B0.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">クラス変数について</a>
</li><li><a href="#h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.83.83.E3.82.B5.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">アクセッサについて</a>
</li><li><a href="#h2-.E6.88.BB.E3.82.8A.E5.80.A4.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6.28PHP.E3.80.81Perl.29">戻り値について(PHP、Perl)</a>
</li><li><a href="#h2-.E3.82.A4.E3.83.B3.E3.83.87.E3.83.B3.E3.83.88.E3.81.A8.E3.82.AF.E3.83.A9.E3.82.B9.E6.9B.B8.E5.BC.8F.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">インデントとクラス書式について</a>
</li></ol></li><li><a href="#h1-.E3.82.B3.E3.83.A1.E3.83.B3.E3.83.88.E3.81.AE.E6.9B.B8.E3.81.8D.E6.96.B9">コメントの書き方</a>
<ol><li><a href="#h2-PHP.E7.B7.A8">PHP編</a>
</li></ol></li><li><a href="#h1-controller.E3.81.8C.E6.8C.81.E3.81.A4.E3.81.B9.E3.81.8D.E5.AE.9F.E4.BD.93.E3.81.B8.E3.81.AE.E8.80.83.E5.AF.9F">controllerが持つべき実体への考察</a>
</li><li><a href="#h1-CONV.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9">CONVの使い方</a>
</li></ol></div>
<h1 id="h1-.E9.96.8B.E7.99.BA.E3.83.A1.E3.83.A2">開発メモ</h1><h2 id="h2-.E3.83.95.E3.82.A1.E3.82.A4.E3.83.AB.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ファイルについて</h2><p>原則は「１ファイル１クラス」。
</p><h2 id="h2-.E5.91.BD.E5.90.8D.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">命名について</h2><p>基本的に「哲学」に由来する名前をつけ、間違っても「機能」に由来する名前はつけない。
なお、クラス名によって明示されている名前については、冗長なのでつけないようにする。
configクラス内において「configファイルの名前を設定する」メソッド
</p><p>良い例：
set_filename()
set_filepath()
</p><p>微妙な例：ちょっと冗長
set_config_filename() // configは分かりきってるので冗長
</p><p>悪い例：
set_string() // 文字列であるかどうかなんてのはぶっちゃけどうでも良いので
</p><h2 id="h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.82.B9.E6.A8.A9.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">アクセス権について</h2><p>かならず public/protected/private 修飾子をつける。(PHP)
なお、メソッドであっても、必要に応じてprotectedにすることが望ましい。
</p><h2 id="h2-final.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6.28Java.E3.80.81PHP.29">finalについて(Java、PHP)</h2><p>finalについては必要に応じて。ただ、フレームワークの柔軟性を考えると、あまり使わないだろうと思われる。
</p><h2 id="h2-.E4.BE.8B.E5.A4.96.E5.87.A6.E7.90.86.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">例外処理について</h2><p>特殊なケースを除いて、原則としては、throwは「フレームワーク内では」投げない。
ちょっと検討が必要かも。
</p><h2 id="h2-.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E5.90.8D.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">メソッド名について</h2><p>「へび」とする。
英小文字を用いる。複数単語がある場合、アンダースコアを使ってつなげる。
例：
get_value
</p><h2 id="h2-.E3.82.AF.E3.83.A9.E3.82.B9.E5.A4.89.E6.95.B0.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">クラス変数について</h2><p>命名は「へび」とし、最後にアンダースコアをつける。
例：
dbh_
user_data_
</p><h2 id="h2-.E3.82.A2.E3.82.AF.E3.82.BB.E3.83.83.E3.82.B5.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">アクセッサについて</h2><p>クラス変数は「アクセッサ以外では絶対に触らない」事を鉄則とする。
また、かならずprivateとし、protectedにはしない(アクセッサで対応すること)。
(デバッグ時の捕捉の問題があるので。
アクセッサは基本的に以下の２パターンのいずれかとする。
</p><p>通常の場合
set_名前
get_名前
</p><p>配列系(複数のデータを設定できるもの)の場合
push_名前：データを積み上げる
set_名前：配列を一気に設定する：もとにある情報は潰して上書き、のイメージで
get_名前：これは「配列を全部取得」する(keyなどを利用して一つだけ欲しい場合、別口にメソッドをつくり、このgetメソッド経由でアクセスする)
clear_名前：データを消す
</p><p>(PHP)
また。これは強制ではないが、セッターの引数については
数字を期待していたら$i
文字を期待していたら$s
配列を期待してたら$a
インスタンスを期待していたら $o
にしておくと分かりやすい
</p><h2 id="h2-.E6.88.BB.E3.82.8A.E5.80.A4.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6.28PHP.E3.80.81Perl.29">戻り値について(PHP、Perl)</h2><p>型があるものと考え、かならず「一つのメソッドは一つの型を返す」ようにする。
なお、エラーについては以下の通りとする。
</p><p>数値を返すものの場合：-1
ただし「正常な値として負の値も戻る」ようなメソッドの場合、原則として「boolean」復帰にする。
</p><p>文字列を返すものの場合：&quot;&quot; 空文字
ただし「正常な値として空文字も戻る」ようなメソッドの場合、原則として「boolean」復帰にする。
</p><p>配列を返すものの場合：空配列
ただし「正常な値として空配列も戻る」ようなメソッドの場合、原則として「boolean」復帰にする。
</p><p>オブジェクトを返すものの場合：NULL
ただし「正常な値としてNULLも戻る」ようなメソッドの場合、原則として「boolean」復帰にする(…って。ありえるのか？)
</p><p>booleanを返すものの場合：false
</p><p>ぶっちゃけ。基本的には、処理系はすべてboolean復帰とし、trueが帰ってきたら情報をget系で取得したほうがよいと思う。
</p><h2 id="h2-.E3.82.A4.E3.83.B3.E3.83.87.E3.83.B3.E3.83.88.E3.81.A8.E3.82.AF.E3.83.A9.E3.82.B9.E6.9B.B8.E5.BC.8F.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">インデントとクラス書式について</h2><p>注：これは要検討かも
tabインデントであることはMust()。
見栄えを重視したときのtabのサイズは、一応２を推奨するが、４又は８でもよしとする。
</p><p>各インデントは以下のようにする。
メソッド、変数宣言などはすべてインデント０
</p><pre>
class クラス名
{
コンストラクタ
デストラクタ：必要に応じて

init

アクセッサ

メソッド各種

//
変数宣言
}

</pre><h1 id="h1-.E3.82.B3.E3.83.A1.E3.83.B3.E3.83.88.E3.81.AE.E6.9B.B8.E3.81.8D.E6.96.B9">コメントの書き方</h1><h2 id="h2-PHP.E7.B7.A8">PHP編</h2><p>基本はPHPDocumentorを使用するイメージ
</p><pre>
/**
 * classの説明(一行)：基本的にクラス名
 *
 * classの説明(複数行)：クラスに対するコメント突っ込みの類
 * HTMLに反映されたとき改行はされない
 *
 * @package magicweapon
 * @link http://www.grid-works-guild.net/MagicWeapon/ MagicWeapon
 * @access  public
 * @author  Michiaki Wuzawa &lt;wuzawa@m-fr.net&gt;
 * @create  $LastChangedDate$
 * @version $Revision$
 */

</pre><pre>
メソッドあたりのコメント
/**
 * メソッドの説明(一行)：基本的にメソッド名
 *
 * メソッドの説明(複数行)：詳細な説明その他
 *
 * @access publicかprivateかprotectedか
 * @param 型 名前 説明
 * @return 戻り値の型 簡単な説明
 */

</pre><h1 id="h1-controller.E3.81.8C.E6.8C.81.E3.81.A4.E3.81.B9.E3.81.8D.E5.AE.9F.E4.BD.93.E3.81.B8.E3.81.AE.E8.80.83.E5.AF.9F">controllerが持つべき実体への考察</h1><p>一応「お便利君」であると想定すると、基本的には
</p><ul><li>controllerでnew
</li><li>参照持ち回り
</li></ul><p>がある程度正しいのではないかと推測してみたりみなかったり。
</p><p>持ちまわりたいものが入ってるクラスつくるか。
grobalに近いけど、これならまだしも制御しやすいし。
</p><p>持ちたいものとしては
</p><ul><li>CGI REQUEST
</li><li>CGI RESPONSE
</li><li>AUTH系 ？？？
</li><li>再帰call用の「持ち回り鞄」クラス
</li></ul><h1 id="h1-CONV.E3.81.AE.E4.BD.BF.E3.81.84.E6.96.B9">CONVの使い方</h1><p>…書かないとねぇ</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E9%96%8B%E7%99%BA%E9%99%A3%E7%94%A8%E5%90%84%E7%A8%AE%E6%96%87%E6%9B%B8">
    <title>開発陣用各種文書</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E9%96%8B%E7%99%BA%E9%99%A3%E7%94%A8%E5%90%84%E7%A8%AE%E6%96%87%E6%9B%B8</link>
    <dc:identifier>開発陣用各種文書</dc:identifier>
    <dc:date>2007-11-05T12:08:13+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= 追加とかの方針草案
最終的には約一名の独断と偏見になりそうなのですが。一応、方針っていうか方向性を。

== クラス＆メソッドの追加
設計如何にもよりますが、基本的には許可の方向で。

ただ設計方針は割合にシビアにチェックします。

基本的には

 * 基底系クラス
 * 通常系クラス
 * お便利系クラス
 * 特化系クラス
]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E8.BF.BD.E5.8A.A0.E3.81.A8.E3.81.8B.E3.81.AE.E6.96.B9.E9.87.9D.E8.8D.89.E6.A1.88">追加とかの方針草案</a>
<ol><li><a href="#h2-.E3.82.AF.E3.83.A9.E3.82.B9.EF.BC.86.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E3.81.AE.E8.BF.BD.E5.8A.A0">クラス＆メソッドの追加</a>
<ol><li><a href="#h3-.E5.9F.BA.E5.BA.95.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">基底系クラスとは</a>
</li><li><a href="#h3-.E9.80.9A.E5.B8.B8.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">通常系クラスとは</a>
</li><li><a href="#h3-.E3.81.8A.E4.BE.BF.E5.88.A9.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">お便利系クラスとは</a>
</li><li><a href="#h3-.E7.89.B9.E5.8C.96.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">特化系クラスとは</a>
</li></ol></li><li><a href="#h2-.E3.83.AD.E3.82.B8.E3.83.83.E3.82.AF.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ロジックについて</a>
</li></ol></li><li><a href="#h1-.E7.94.A8.E8.AA.9E.E9.9B.86">用語集</a>
<ol><li><a href="#h2-mw.conf">mw.conf</a>
</li><li><a href="#h2-.E6.A5.AD.E5.8B.99.E5.90.8D.conf">業務名.conf</a>
</li><li><a href="#h2-db.conf">db.conf</a>
</li></ol></li></ol></div>
<h1 id="h1-.E8.BF.BD.E5.8A.A0.E3.81.A8.E3.81.8B.E3.81.AE.E6.96.B9.E9.87.9D.E8.8D.89.E6.A1.88">追加とかの方針草案</h1><p>最終的には約一名の独断と偏見になりそうなのですが。一応、方針っていうか方向性を。
</p><h2 id="h2-.E3.82.AF.E3.83.A9.E3.82.B9.EF.BC.86.E3.83.A1.E3.82.BD.E3.83.83.E3.83.89.E3.81.AE.E8.BF.BD.E5.8A.A0">クラス＆メソッドの追加</h2><p>設計如何にもよりますが、基本的には許可の方向で。
</p><p>ただ設計方針は割合にシビアにチェックします。
</p><p>基本的には
</p><ul><li>基底系クラス
</li><li>通常系クラス
</li><li>お便利系クラス
</li><li>特化系クラス
</li></ul><p>の方向があると思ってください。
</p><h3 id="h3-.E5.9F.BA.E5.BA.95.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">基底系クラスとは</h3><p>「明らかにどう考えても最低限これだけは何が何でもいるだろってかなきゃまずいし動かないし」
っていう、ぎりっぎりまで削り取ったクラスです。
</p><p>skeltonとかいう名前にすることが多いかな。
</p><h3 id="h3-.E9.80.9A.E5.B8.B8.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">通常系クラスとは</h3><p>skeltonを継承したりすることが多いと思うですが。
</p><p>基本的には「普通に使うならこれくらいは欲しいよねぇ」というバランス感覚満ち溢れたクラスです(笑
</p><p>ここには「あると便利だよねぇ」は基本含まれません。
</p><h3 id="h3-.E3.81.8A.E4.BE.BF.E5.88.A9.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">お便利系クラスとは</h3><p>文字通り。唯一、うち的には比較的「肥え太った」クラスです。
</p><h3 id="h3-.E7.89.B9.E5.8C.96.E7.B3.BB.E3.82.AF.E3.83.A9.E3.82.B9.E3.81.A8.E3.81.AF">特化系クラスとは</h3><p>「掲示板に便利」とか「ECサイト用」とか、割合にピンポイントなものです。
これは必ず「ディレクトリを分けて」入れます。
</p><h2 id="h2-.E3.83.AD.E3.82.B8.E3.83.83.E3.82.AF.E3.81.AB.E3.81.A4.E3.81.84.E3.81.A6">ロジックについて</h2><p>実装方法はたぶんうるさいくらいチェックします(笑
</p><p>とりあえず、独裁政権引いてる約一名の脳みそをこじあけると…
</p><ul><li>多言語への移植考えてます
</li><li>シンプルで見通しのよい構造が好きです
</li><li>翻って、リフレクションとかあの辺は言語実装絡み易いので好みません
</li><li>変数のスコープには神経を払いましょう
</li></ul><p>などなど。
</p><p>何かほかに出てきたら追加します。
</p><h1 id="h1-.E7.94.A8.E8.AA.9E.E9.9B.86">用語集</h1><h2 id="h2-mw.conf">mw.conf</h2><p>別にこのファイル名でなくてもいいのですがなんとなく慣習的に。
「<a href="http://sourceforge.jp/projects/magicweapon/wiki/MagicWeapon">MagicWeapon</a>のファイル群がどこにあるのかを知っているファイル」になるので。
唯一にして最重要な「path情報を保持する」ファイルです。
</p><h2 id="h2-.E6.A5.AD.E5.8B.99.E5.90.8D.conf">業務名.conf</h2><p>これもかなり慣習チックですが。大抵、ここに設定がごっちゃりと入ってます。
</p><h2 id="h2-db.conf">db.conf</h2><p>データベースの接続情報が入っていること「が多い」ファイル名です。
少なくとも、wwwroot以下に置くなんてアバウトなマネは控えましょう。危険すぎます。</p>]]>
    </content:encoded>
      </item>
        <item rdf:about="http://sourceforge.jp/projects/magicweapon/wiki/%E8%A6%81%E6%9C%9B%E5%90%84%E7%A8%AE">
    <title>要望各種</title>
    <link>http://sourceforge.jp/projects/magicweapon/wiki/%E8%A6%81%E6%9C%9B%E5%90%84%E7%A8%AE</link>
    <dc:identifier>要望各種</dc:identifier>
    <dc:date>2007-11-03T02:38:30+09:00</dc:date>
        <description>
      <![CDATA[[[PageOutline]]

= 仕様周りとか実装とか
なんか要望とかあったらかいといて～

== コントローラ
エラー処理、マップファイルフォーマット修正、鞄オブジェの持ち回りなどなどを実装予定。

== clump系各種
一式作る。line_clump、find_clumpも視野内。

== viewクラス系
(X)HTMLコメント外しの話がでてる。携帯系で顕著かな]]>
    </description>
    <content:encoded>
      <![CDATA[<div class="pageoutline"><div class="pageoutline-title"><div class="action"><button type="button" onClick="javascript:togglePageOutline(this)"><img src="//static.sourceforge.jp/wiki/images/icons/roll-up.gif" border="0"></button></div>Outline</div><ol><li><a href="#h1-.E4.BB.95.E6.A7.98.E5.91.A8.E3.82.8A.E3.81.A8.E3.81.8B.E5.AE.9F.E8.A3.85.E3.81.A8.E3.81.8B">仕様周りとか実装とか</a>
<ol><li><a href="#h2-.E3.82.B3.E3.83.B3.E3.83.88.E3.83.AD.E3.83.BC.E3.83.A9">コントローラ</a>
</li><li><a href="#h2-clump.E7.B3.BB.E5.90.84.E7.A8.AE">clump系各種</a>
</li><li><a href="#h2-view.E3.82.AF.E3.83.A9.E3.82.B9.E7.B3.BB">viewクラス系</a>
</li><li><a href="#h2-mail.E3.82.AF.E3.83.A9.E3.82.B9">mailクラス</a>
</li></ol></li></ol></div>
<h1 id="h1-.E4.BB.95.E6.A7.98.E5.91.A8.E3.82.8A.E3.81.A8.E3.81.8B.E5.AE.9F.E8.A3.85.E3.81.A8.E3.81.8B">仕様周りとか実装とか</h1><p>なんか要望とかあったらかいといて～
</p><h2 id="h2-.E3.82.B3.E3.83.B3.E3.83.88.E3.83.AD.E3.83.BC.E3.83.A9">コントローラ</h2><p>エラー処理、マップファイルフォーマット修正、鞄オブジェの持ち回りなどなどを実装予定。
</p><h2 id="h2-clump.E7.B3.BB.E5.90.84.E7.A8.AE">clump系各種</h2><p>一式作る。line_clump、find_clumpも視野内。
</p><h2 id="h2-view.E3.82.AF.E3.83.A9.E3.82.B9.E7.B3.BB">viewクラス系</h2><p>(X)HTMLコメント外しの話がでてる。携帯系で顕著かな。
</p><p>携帯系といえば「絵文字対応」とかね。…でも絵文字対応は「別class」作った上で「必要に応じて当てはめる」感じかなぁ。
どっちかってぇとCONVの拡張になりそう。
</p><h2 id="h2-mail.E3.82.AF.E3.83.A9.E3.82.B9">mailクラス</h2><p>鋭意作成中ｗ
</p>]]>
    </content:encoded>
      </item>
    </rdf:RDF>

