http://redmine.openpne.jp/
http://redmine.openpne.jp/favicon.ico
2012-04-04T07:28:26Z
OpenPNE Issue Tracking System
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14116
2012-04-04T07:28:26Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul><li><strong>対象バージョン</strong> を <i>OpenPNE 3.8beta1</i> にセット</li></ul>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14123
2012-04-04T07:55:32Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul><li><strong>ステータス</strong> を <i>New(新規)</i> から <i>Pending Review(レビュー待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>0</i> から <i>50</i> に変更</li></ul><p>更新履歴 <a class="changeset" title="add object parameter on op_doctrine event. (fixes #2916)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/08f8be6cc6211177c60a11e849261306e2056321">08f8be6cc6211177c60a11e849261306e2056321</a> で適用されました。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14124
2012-04-04T07:55:33Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul></ul><p>更新履歴 <a class="changeset" title="add object parameter on op_doctrine event. (fixes #2916)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/5bd27b44b7212ec5f80fafc650c34b941e79ba1c">5bd27b44b7212ec5f80fafc650c34b941e79ba1c</a> で適用されました。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14202
2012-04-06T02:00:28Z
Yuya Watanabe
watanabe@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Pending Review(レビュー待ち)</i> から <i>Rejected(差し戻し)</i> に変更</li></ul><a name="差し戻し理由"></a>
<h3 >差し戻し理由<a href="#差し戻し理由" class="wiki-anchor">¶</a></h3>
<p>object という名称が適切ではないのではないかと思いました.これが適切なのであればこのままもう一度ステータスをレビュー待ちにしてください.</p>
<p>lib/util/opDoctrineEventNotifier.class.php<br /><pre>
28 $dispatcher->notify(new sfEvent(null, sprintf('op_doctrine.%s_%s_%s', $when, $action, get_class($doctrineEvent->getInvoker())), array('object' => $doctrineEvent->getInvoker())));
</pre></p>
<a name="メモ"></a>
<h3 >メモ<a href="#メモ" class="wiki-anchor">¶</a></h3>
<p>パラメータとして渡された値を取得するには以下のようにする?</p>
<pre>
$event->offsetGet('object');
</pre>
<p>lib/vendor/symfony/lib/event_dispatcher/sfEvent.php<br /><pre>
125 /**
126 * Returns a parameter value (implements the ArrayAccess interface).
127 *
128 * @param string $name The parameter name
129 *
130 * @return mixed The parameter value
131 */
132 public function offsetGet($name)
133 {
134 if (!array_key_exists($name, $this->parameters))
135 {
136 throw new InvalidArgumentException(sprintf('The event "%s" has no "%s" parameter.', $this->name, $name));
137 }
138
139 return $this->parameters[$name];
140 }
</pre></p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14238
2012-04-06T12:15:13Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Rejected(差し戻し)</i> から <i>Pending Review(レビュー待ち)</i> に変更</li></ul><p>更新履歴 <a class="changeset" title="added opDoctrineEvent class (fixes #2916)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/8dfe7feb83fa26173344dfdf84480286de51498a">8dfe7feb83fa26173344dfdf84480286de51498a</a> で適用されました。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14240
2012-04-06T12:15:15Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul></ul><p>更新履歴 <a class="changeset" title="added opDoctrineEvent class (fixes #2916)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/bfc258b3df1716ffa3dde0f6c7aa2326b9825714">bfc258b3df1716ffa3dde0f6c7aa2326b9825714</a> で適用されました。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14244
2012-04-06T12:19:14Z
Yuya Watanabe
watanabe@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Pending Review(レビュー待ち)</i> から <i>Pending Testing(テスト待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>50</i> から <i>70</i> に変更</li></ul><p>レビューOKとします.下記に改善内容を示します.</p>
<a name="改善内容"></a>
<h3 >改善内容<a href="#改善内容" class="wiki-anchor">¶</a></h3>
<p>sfEvent を継承した opDoctrineEvent というDoctrineのレコードを扱うイベントを新たに作成し,これを投げるように変更.<br />この opDoctrineEvent は変更を行ったモデルのオブジェクトを Subject として保持し,利用できるような仕様となっている,もとものと Doctrine_Event が必要な場合は getDoctrineEvent() メソッドを呼び出すことで利用可能となっている.</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14245
2012-04-06T12:20:11Z
Kiwa Sakai
kiwa@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Pending Testing(テスト待ち)</i> から <i>Fixed(完了)</i> に変更</li><li><strong>進捗率</strong> を <i>70</i> から <i>100</i> に変更</li></ul><p>テスト対象外のためこのチケットは閉じます</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14246
2012-04-06T12:21:10Z
Youichi Kimura
kim.upsilon@bucyou.net
<ul></ul><p>note-4 の指摘について。</p>
<p>まず僕がチケットに記載した仕様はsymfonyのadminモジュールで使われている doctrine.admin.save_object 等の既存のイベントに似せて書いたものです。<br />パラメータの <code>object</code> というキーも既存のものに合わせた名前となっています。これについては <code>record</code> なり適切な名称に変更することは問題ないと思います。</p>
<p>しかし、修正コミット (<a class="changeset" title="added opDoctrineEvent class (fixes #2916)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/bfc258b3df1716ffa3dde0f6c7aa2326b9825714">bfc258b3</a>) に含まれている <code>opDoctrineEvent</code> を用いた方法は適切ではないと思います。これは、 <code>opDoctrineEvent</code> というクラスを作成する設計が悪いという意味ではなく、「他のイベントがそうではない」ためです。現状の、パラメータに連想配列を使うスタイルが綺麗でないとして別の方法を使ったとしても、以前のスタイルに慣れ親しんでいる側としては <code>$event->getHogehoge()</code> という書き方はいささか不自然に感じます。それに、イベントによって <code>$event["hogehoge"]</code> と <code>$event->getHogehoge()</code> が混在することは決して良いとは思いません。</p>
<p>要約: 下記の修正で十分ではないでしょうか。<br /><pre><code class="diff syntaxhl"><span class="CodeRay"><span class="change"><span class="change">@@</span> -25,7 +25,7 <span class="change">@@</span></span> class opDoctrineEventNotifier extends Doctrine_Record_Listener
}
$dispatcher = sfContext::getInstance()->getEventDispatcher();
<span class="line delete"><span class="delete">-</span> $dispatcher->notify(new sfEvent(null, sprintf('op_doctrine.%s_%s_%s', $when, $action, get_class($doctrineEvent->getInvoker())), array('<span class="eyecatcher">object</span>' => $doctrineEvent->getInvoke</span>
<span class="line insert"><span class="insert">+</span> $dispatcher->notify(new sfEvent(null, sprintf('op_doctrine.%s_%s_%s', $when, $action, get_class($doctrineEvent->getInvoker())), array('<span class="eyecatcher">record</span>' => $doctrineEvent->getInvoke</span>
}
public function preSave(Doctrine_Event $event)
</span></code></pre></p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14248
2012-04-06T12:33:50Z
Youichi Kimura
kim.upsilon@bucyou.net
<ul><li><strong>ステータス</strong> を <i>Fixed(完了)</i> から <i>Rejected(差し戻し)</i> に変更</li><li><strong>進捗率</strong> を <i>100</i> から <i>50</i> に変更</li></ul><p>note-9の理由で、一旦ステータスを戻します。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14249
2012-04-06T12:53:50Z
Yuya Watanabe
watanabe@openpne.jp
<ul></ul><p>Youichi Kimura は書きました:</p>
<blockquote>
<p>note-4 の指摘について。</p>
<p>まず僕がチケットに記載した仕様はsymfonyのadminモジュールで使われている doctrine.admin.save_object 等の既存のイベントに似せて書いたものです。<br />パラメータの <code>object</code> というキーも既存のものに合わせた名前となっています。これについては <code>record</code> なり適切な名称に変更することは問題ないと思います。</p>
<p>しかし、修正コミット (<a class="changeset" title="added opDoctrineEvent class (fixes #2916)" href="http://redmine.openpne.jp/projects/op3/repository/revisions/bfc258b3df1716ffa3dde0f6c7aa2326b9825714">bfc258b3</a>) に含まれている <code>opDoctrineEvent</code> を用いた方法は適切ではないと思います。これは、 <code>opDoctrineEvent</code> というクラスを作成する設計が悪いという意味ではなく、「他のイベントがそうではない」ためです。現状の、パラメータに連想配列を使うスタイルが綺麗でないとして別の方法を使ったとしても、以前のスタイルに慣れ親しんでいる側としては <code>$event->getHogehoge()</code> という書き方はいささか不自然に感じます。それに、イベントによって <code>$event["hogehoge"]</code> と <code>$event->getHogehoge()</code> が混在することは決して良いとは思いません。</p>
<p>要約: 下記の修正で十分ではないでしょうか。<br />[...]</p>
</blockquote>
<p>以前のスタイルとして連想配列から値を取ってくるという使い方を提供すべきという点については理解しました.これについては note-9 の方法もいいと思います.ただ今回の修正が悪いというわけでもないため,今回の修正に以前のスタイルの値の取得方法を提供するという案でどうでしょうか?</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14250
2012-04-06T13:04:22Z
Youichi Kimura
kim.upsilon@bucyou.net
<ul></ul><p>note-11は <code>opDoctrineEvent</code> にArrayAccessによるパラメータの取得とgetterメソッドを両方備える折衷案という解釈でよろしいでしょうか? もしそうであれば僕は問題ないと思います。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14251
2012-04-06T13:07:50Z
Yuya Watanabe
watanabe@openpne.jp
<ul></ul><p>note-12 の通りです.懸念点としては getSubject() の値と ArrayAccess で取得された内容に差異が出る可能性があるため, getSubject() をオーバーライドして ArrayAccess で得られる値を返すようにすべきという点でしょうか.</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14252
2012-04-06T13:14:09Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul></ul><p>修正案</p>
<pre>
diff --git a/lib/event/opDoctrineEvent.class.php b/lib/event/opDoctrineEvent.class.php
index 912c28e..1fc78a9 100644
--- a/lib/event/opDoctrineEvent.class.php
+++ b/lib/event/opDoctrineEvent.class.php
@@ -21,7 +21,10 @@ class opDoctrineEvent extends sfEvent
public function __construct(Doctrine_Event $event, $when, $action, $parameters = array())
{
- parent::__construct($event->getInvoker(), sprintf('op_doctrine.%s_%s_%s', $when, $action, get_class($event->getInvoker())), $parameters);
+ $invoker = $event->getInvoker();
+ $parameters['record'] = $invoker;
+
+ parent::__construct($invoker, sprintf('op_doctrine.%s_%s_%s', $when, $action, get_class($invoker)), $parameters);
$this->doctrineEvent = $event;
}
@@ -29,4 +32,9 @@ class opDoctrineEvent extends sfEvent
{
return $this->doctrineEvent;
}
+
+ public function getSubject()
+ {
+ return $this['record'];
+ }
}
</pre>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14253
2012-04-06T13:14:19Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Rejected(差し戻し)</i> から <i>Accepted(着手)</i> に変更</li><li><strong>進捗率</strong> を <i>50</i> から <i>0</i> に変更</li></ul>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14254
2012-04-06T13:18:28Z
Yuya Watanabe
watanabe@openpne.jp
<ul></ul><p>sfEvent では subject を変更する手段がコンストラクタでのみ提供されていますが, opDoctrineRecord の note-14 の実装だと $parameters の値を変更することで subject を変更で来てしまうというハックができてしまいますが,これは想定されない使い方として扱うものとします.</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14256
2012-04-06T13:21:55Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Accepted(着手)</i> から <i>Pending Review(レビュー待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>0</i> から <i>50</i> に変更</li></ul><p>更新履歴 <a class="changeset" title="(fixes #2916) modified to get array access." href="http://redmine.openpne.jp/projects/op3/repository/revisions/6807fa548f8167ba08ffe9efa2376e3a666e7e97">6807fa548f8167ba08ffe9efa2376e3a666e7e97</a> で適用されました。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14257
2012-04-06T13:21:57Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul></ul><p>更新履歴 <a class="changeset" title="(fixes #2916) modified to get array access." href="http://redmine.openpne.jp/projects/op3/repository/revisions/4ad01d6ca9ed72bc3d4fe304ed77d18a527a710c">4ad01d6ca9ed72bc3d4fe304ed77d18a527a710c</a> で適用されました。</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14258
2012-04-06T13:24:35Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul></ul><pre>
static function tetete(opDoctrineEvent $event)
{
var_dump($event->getSubject()->getId());
var_dump($event['record']->getId());
}
</pre>
<p>↑のような使い方をすることによって,期待する値を取得することができます.</p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14259
2012-04-06T13:28:20Z
Yuya Watanabe
watanabe@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Pending Review(レビュー待ち)</i> から <i>Pending Testing(テスト待ち)</i> に変更</li><li><strong>進捗率</strong> を <i>50</i> から <i>70</i> に変更</li></ul><p>note-9 で指摘された内容も考慮されたものと考えてレビューOKとします.</p>
<a name="master"></a>
<h3 >master<a href="#master" class="wiki-anchor">¶</a></h3>
<p><a class="changeset" title="(fixes #2916) modified to get array access." href="http://redmine.openpne.jp/projects/op3/repository/revisions/6807fa548f8167ba08ffe9efa2376e3a666e7e97">6807fa548f8167ba08ffe9efa2376e3a666e7e97</a></p>
<a name="release-38beta1"></a>
<h3 >release-3.8beta1<a href="#release-38beta1" class="wiki-anchor">¶</a></h3>
<p><a class="changeset" title="(fixes #2916) modified to get array access." href="http://redmine.openpne.jp/projects/op3/repository/revisions/4ad01d6ca9ed72bc3d4fe304ed77d18a527a710c">4ad01d6ca9ed72bc3d4fe304ed77d18a527a710c</a></p>
OpenPNE 3 - Enhancement(機能追加・改善) #2916: op_doctrine.pre_save 等のnotifyイベントで、発生元のモデルオブジェクトを受信側で取得できるようにする
http://redmine.openpne.jp/issues/2916?journal_id=14260
2012-04-06T13:29:20Z
Shouta Kashiwagi
kashiwagi@openpne.jp
<ul><li><strong>ステータス</strong> を <i>Pending Testing(テスト待ち)</i> から <i>Fixed(完了)</i> に変更</li><li><strong>進捗率</strong> を <i>70</i> から <i>100</i> に変更</li></ul><p>テストOKです.<br />(note-19コードサンプルで検証済み)</p>