社長BLOG

【OP3TIPS】無ドキュメント時代の関数リファレンス

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開発の助けになれば嬉しい。

OpenPNE�~�蓈���񋟃T�[�r�X�̂��m�点

  • ��K�̓z�X�e�B���O
  • �Z�p�T�|�[�g
  • �J�X�^�}�C�Y
  • OpenPNE Manager
  • ���q���܃T�|�[�g

ページの先頭に戻る