> プラグイン > プラグインで画面割り込みについて |
プラグイン
スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
kozimon |
投稿日時: 2016/6/8 14:23
対応状況: 解決済
|
半人前 登録日: 2016/5/26 居住地: 投稿: 23 |
Re: プラグインで画面割り込みについて すみません。解決しました。
原因 いろいろテストしている内にevent.ymlの設定で .completeであるべきところを .initializerに変更してそのままにしていたためでした。 if ($event->hasResponse()) { return $event->getResponse(); } の直前のdispatchよりひとつ前のdispatchで割り込みをしていたため、Responseがリセットされていたというものでした・・・。 ココに来て初歩的ミス申し訳ありません。 ありがとうございました! |
DELIGHT |
投稿日時: 2016/6/8 14:13
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: プラグインで画面割り込みについて あと考えられる可能性としては、他のプラグインの存在です。
他のプラグインが同じイベントで、
にたどり着く前にexitを使ってリダイレクトを送信しているとか。 そうでなければ、現時点で私が分かる範囲を超えてしまいますね…。 追記: 先程の書き込みから察するにEventArgs::hasResponse()やEventArgs::getResponse()をダンプしているようなので、exitでもなさそうですね。 お力になれず申し訳ありません。
|
kozimon |
投稿日時: 2016/6/8 14:05
対応状況: 開発中
|
半人前 登録日: 2016/5/26 居住地: 投稿: 23 |
Re: プラグインで画面割り込みについて onXXXXXXCompleteAfterは通っています。
dump("b"); $event->setResponse($app->redirect($app->url('cart'))); dump("c"); 両方dumpされました。 もしかして、eventのインポート...は間違いないですかね use Eccube\Event\EventArgs; |
DELIGHT |
投稿日時: 2016/6/8 13:57
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: プラグインで画面割り込みについて おかしいですね、こちらでは3.0.9と3.0.10のどちらでも遷移することを今確認したのですが…。
onXXXXXXCompleteAfterを通っているのは確かですか?
|
kozimon |
投稿日時: 2016/6/8 13:42
対応状況: 開発中
|
半人前 登録日: 2016/5/26 居住地: 投稿: 23 |
Re: プラグインで画面割り込みについて public function onXXXXXXCompleteAfter(EventArgs $event){
$app = $this->app; $event->setResponse($app->redirect($app->url('cart'))); } 中身を確認した所 $event->hasResponse() = false $event->getResponse() = null となっており、やはり遷移されませんでした。 |
DELIGHT |
投稿日時: 2016/6/8 13:37
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: プラグインで画面割り込みについて
でどうでしょうか。
|
kozimon |
投稿日時: 2016/6/8 13:31
対応状況: 開発中
|
半人前 登録日: 2016/5/26 居住地: 投稿: 23 |
Re: プラグインで画面割り込みについて event.phpの中で
$event->setResponse するのが正規法ということでしょうか。 その場合、 if ($event->hasResponse()) { return $event->getResponse(); } の中で return $app->redirect($app->url('cart'); とするには、event.phpの中でどのように記述すればよろしいのでしょうか。 public function onXXXXXXCompleteAfter(EventArgs $event){ $app = $this->app; $response = $event->getResponse(); //$app->redirect($app->url('cart')をsetしたい。 $event->setResponse($response); } |
DELIGHT |
投稿日時: 2016/6/8 11:16
対応状況: −−−
|
仙人 登録日: 2010/2/3 居住地: 熊本県・九州・長野県・関東甲信越 投稿: 572 |
Re: プラグインで画面割り込みについて 3.0.9以降であれば、EventArgsにResponseをセットすればイベント後にそれを返してくれる機能が追加されました。
https://github.com/EC-CUBE/ec-cube/blob/3.0.9/src/Eccube/Controller/ProductController.php#L284 但しこれは全てのイベントに用意されている訳ではないので、他のイベントで同様の機能を利用したい場合はコントローラを都度確認して下さい。 イベント中にexitするのはプラグインとしてはお行儀が悪いので、これが利用できるのであれば極力利用した方がいいと思います。 追記: 3.0.9以降であれば、というよりEventArgsがそもそも3.0.9で追加されたクラスなので3.0.9以降ですね。
|
kozimon |
投稿日時: 2016/6/8 11:14
対応状況: −−−
|
半人前 登録日: 2016/5/26 居住地: 投稿: 23 |
Re: プラグインで画面割り込みについて ありがとうございました!
無事に割り込み遷移することが出来ました。 以下 public function onXXXXXCompleteAfter(EventArgs $event){ $app = $this->app; $response = $event->getResponse(); $response = $app->redirect($app->url('cart')); $response->setContent(null); $response->send(); exit; } |
tacky |
投稿日時: 2016/6/8 11:08
対応状況: −−−
|
長老 登録日: 2015/10/3 居住地: Tokyo 投稿: 277 |
Re: プラグインで画面割り込みについて return $app->redirect($app->url('cart'));
を $response = $app->redirect($app->url('cart')); $response->setContent(null); $response->send(); exit; にしてみてください。 これで出来ると思います。 |
(1) 2 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |