社長BLOG
【OP3TIPS】無ドキュメント時代の関数リファレンス
- 2010-07-09 (金)
- 社長BLOG
OpenPNE3にはドキュメントが無い。
そんな中どうやって開発をするか?
ちょっとしたTIPSを紹介する。
よくあるのがこんなケース。
「データベースのテーブル(モデル)を操作したいんだが、どういう関数を呼び出したらいいかわからない」
今回はこれを解説する。もう少し課題を具体的にする。
「フレンドリンクを管理するmember_relationshipテーブル(MemberRelationshipモデル)で、フレンド関係にあるか判定する関数の使い方を調べたい」
1:OpenPNEのソースコードをgrepし MemberRelationshipをさがす。
grep MemberRelationship ./ -R | less
するとこんな結果が返る。
./lib/action/opMemberAction.class.php: $this->relation = new MemberRelationship();
./lib/config/opApplicationConfiguration.class.php: ‘friend_confirm’ => array(‘MemberRelationshipTable’, ‘friendConfirmList’),
./lib/config/opApplicationConfiguration.class.php: ‘friend_confirm’ => array(‘MemberRelationshipTable’, ‘processFriendConfirm’),
./lib/filter/doctrine/base/BaseMemberRelationshipFormFilter.class.php: * MemberRelationship filter form base class.
./lib/filter/doctrine/base/BaseMemberRelationshipFormFilter.class.php:abstract class BaseMemberRelationshipFormFilter extends BaseFormFilterDoctrine
./lib/filter/doctrine/base/BaseMemberRelationshipFormFilter.class.php: return ‘MemberRelationship’;
./lib/filter/doctrine/MemberRelationshipFormFilter.class.php: * MemberRelationship filter form.
./lib/filter/doctrine/MemberRelationshipFormFilter.class.php: * @subpackage MemberRelationship *
./lib/filter/doctrine/MemberRelationshipFormFilter.class.php:class MemberRelationshipFormFilter extends BaseMemberRelationshipFormFilter
./lib/form/doctrine/base/BaseMemberRelationshipForm.class.php: * MemberRelationship form base class.
./lib/form/doctrine/base/BaseMemberRelationshipForm.class.php: * @method MemberRelationship getObject() Returns the current form’s model object
./lib/form/doctrine/base/BaseMemberRelationshipForm.class.php:abstract class BaseMemberRelationshipForm extends BaseFormDoctrine./lib/form/doctrine/base/BaseMemberRelationshipForm.class.php: new sfValidatorDoctrineUnique(array(‘model’ => ‘MemberRelationship’, ‘column’ => array(‘me
mber_id_to’, ‘member_id_from’))),./lib/form/doctrine/base/BaseMemberRelationshipForm.class.php: new sfValidatorDoctrineUnique(array(‘model’ => ‘MemberRelationship’, ‘column’ => array(‘me
mber_id_from’, ‘member_id_to’))),
./lib/form/doctrine/base/BaseMemberRelationshipForm.class.php: return ‘MemberRelationship’;
./lib/form/doctrine/InviteForm.class.php: $relation = Doctrine::getTable(‘MemberRelationship’)->retrieveByFromAndTo($fromMemberId, $toMemberId);
./lib/form/doctrine/InviteForm.class.php: $relation = new MemberRelationship();
./lib/form/doctrine/MemberRelationshipForm.class.php: * MemberRelationship form.
./lib/form/doctrine/MemberRelationshipForm.class.php: * @subpackage MemberRelationship
./lib/form/doctrine/MemberRelationshipForm.class.php:class MemberRelationshipForm extends BaseMemberRelationshipForm./lib/form/MemberConfigForm/MemberConfigAccessBlock.class.php: $relations = Doctrine::getTable(‘MemberRelationship’)->retrievesAccessBlockByMemberIdFrom($thi
s->member->getId());
./lib/form/MemberConfigForm/MemberConfigAccessBlock.class.php: $relationship = Doctrine::getTable(‘MemberRelationship’)
./lib/form/MemberConfigForm/MemberConfigAccessBlock.class.php: $relationship = Doctrine::getTable(‘MemberRelationship’)
./lib/form/MemberConfigForm/MemberConfigAccessBlock.class.php: $relationship = Doctrine::getTable(‘MemberRelationship’)
./lib/form/MemberConfigForm/MemberConfigAccessBlock.class.php: $relationship = new MemberRelationship();
./lib/model/doctrine/ActivityDataTable.class.php: $friendIds = Doctrine::getTable(‘MemberRelationship’)->getFriendMemberIds($memberId);
./lib/model/doctrine/ActivityDataTable.class.php: $relation = Doctrine::getTable(‘MemberRelationship’)->retrieveByFromAndTo($viewerMemberId, $memberId);
./lib/model/doctrine/base/BaseMember.class.php: * @property Doctrine_Collection $MemberRelationship./lib/model/doctrine/base/BaseMember.class.php: * @method Doctrine_Collection getMemberRelationship()
あとはこの中からlessコマンド内サーチ(/コマンド)で、それっぽい使われ方をしている関数を探すのだ。
今回の目的では
$relation = Doctrine::getTable(‘MemberRelationship’)->retrieveByFromAndTo($fromMemberId, $toMemberId);
これが当たりだ。
「新規でフレンドリンクさせたい」
という目的であれば、
new と MemberRelationshipを探せばいいので、
./lib/action/opMemberAction.class.php: $this->relation = new MemberRelationship();
これがヒントになる。
./lib/action/opMemberAction.class.php
このファイルを開けば、
$this->relation = new MemberRelationship();
$this->relation->setMemberIdFrom($this->getUser()->getMemberId());
$this->relation->setMemberIdTo($this->id);
こんなコードが出てくるので、これに習って新規のフレンドリンクをつくることができる。
ドキュメントが無いことは、決してほめられたものでは無いが、
それでもOpenPNE開発の助けになれば嬉しい。