Magentoメッセージに問題があります。私は、理論的にはストアの一部へのアクセスを制限できるはずのカスタムモジュールを構築しています。イベントにフックし controller_action_predispatch
て、ユーザーが現在のリクエストにアクセスできるかどうかを確認するオブザーバーを作成しました。アクションにアクセスできない場合、オブザーバーはユーザーをリダイレクトし、エラー情報を設定します。ショップ全体をクリックしないように、リダイレクトURLを顧客がアクセスしているページに設定したいと思います。を見て、HTTP_REFERER
設定されている場合は使用します。設定されていない場合は、顧客をホームページにリダイレクトします。問題は、後者の場合(ホームページのリダイレクト)はすべてうまく機能しますが、リファラーに基づいてURLを設定すると、メッセージボックスにエラーメッセージが表示されないことです。
オブザーバーからのコード($name
変数は文字列です):
Mage::getSingleton('core/session')->addError('Acces to '.$name.' section is denied');
$url = Mage::helper('core/http')->getHttpReferer() ? Mage::helper('core/http')->getHttpReferer() : Mage::getUrl();
Mage::app()->getResponse()->setRedirect($url);
私が興味深いと思ったのは、オブザーバーファイルに変更を加えて保存すると、失敗してリファラーURLにリダイレクトされる次のリクエストにはエラー情報が表示されますが、それ以降はメッセージが失われることです。
問題は完全なURLとローカルインストール(.localドメインを使用しています)にあると思っていたので、追加してみました
$url = str_replace(Mage::getBaseUrl(), '/', $url);
しかし、これは役に立ちませんでした。
また、phpheader()
関数を使用してリダイレクトを試みましたが、結果はありませんでした。
すべてのキャッシュが無効になります。問題を引き起こすワークフローは次のとおりです。
- アクセス可能なページ(たとえば、/ customer / account)に移動します
- カートのリンクをクリックします(このアカウントのカートは無効になっています)
- / customer / accountに戻ると、エラーメッセージが表示されます
- カートのリンクをもう一度クリックします
- / customer / accountに戻りますが、エラーメッセージは表示されません
どこを見ればよいかについてのヒントをいただければ幸いです。