ブログ

404エラー画面遷移の制御方法

『技術サポートでは、どのような対応をしているか』
皆様に具体的に知っていただきたく、実際の対応例をご紹介致します。

※問合せ内容、および、回答内容は、一部抜粋にて掲載しております。

ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【問い合わせ内容】

OpenPneでページが存在しない場合、404エラー画面へ遷移しますが、
これを制御することは可能でしょうか。

例えば、削除済みのコミュニティトピックやイベントへ遷移しようとした場合に
メッセージの変更、もしくは遷移先ページを制御することはできますか。

可能な場合、その改修方法を教えてください。
ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー
【回答内容】※メール抜粋※

opCommunityTopicPlugin の場合は、
アクション内で $this->getRoute()->getObject() を実行した際、
トピック等の存在確認と、404 ページへのリダイレクトが行われます。

この、自動的に 404 ページへリダイレクトされる機能は
opDynamicAclRoute などで定義されるルーティングの
allow_empty オプションを true にすることで無効にできます。

例えば communityTopic/show アクションで存在しない ID に対するリクエストの動作を、
404 ページへのリダイレクトではなくホーム画面にリダイレクトし
「存在しないか削除されたトピックです。」というメッセージを表示させるように変更する場合、
下記のような修正となります。

===============
— a/lib/routing/opCommunityTopicPluginRouteCollection.class.php
+++ b/lib/routing/opCommunityTopicPluginRouteCollection.class.php
@@ -28,7 +28,7 @@ class opCommunityTopicPluginRouteCollection extends sfRouteCollection
‘url’ => ‘/:id’,
‘action’ => ‘show’,
‘requirements’ => array(‘id’ => ‘\d+’),
– ‘option’ => array(‘model’ => ‘CommunityTopic’, ‘type’ => ‘object’, ‘privilege’ => ‘view’),
+ ‘option’ => array(‘model’ => ‘CommunityTopic’, ‘type’ => ‘object’, ‘privilege’ => ‘view’, ‘allow_empty’ => true),
),
‘new’ => array(
‘url’ => ‘/new/:id’,
— a/lib/action/opCommunityTopicPluginTopicActions.class.php
+++ b/lib/action/opCommunityTopicPluginTopicActions.class.php
@@ -29,6 +29,11 @@ abstract class opCommunityTopicPluginTopicActions extends sfActions
if ($this->getRoute() instanceof sfDoctrineRoute)
{
$object = $this->getRoute()->getObject();
+ if (null === $object)
+ {
+ $this->getUser()->setFlash(‘error’, ‘存在しないか削除されたトピックです。’);
+ $this->redirect(‘@homepage’);
+ }

if ($object instanceof Community)
{
===============

※この変更を行う前に opDynamicAclRoute で allow_empty オプションを使用するため、
「opDynamicAclRoute クラスが allow_empty オプションの利用を想定していない」
というバグを修正する必要があります。

以下のパッチを適用されてください。
https://github.com/openpne/OpenPNE3/commit/b535a4d399ce736d1c2cd6fc61acfcba1e37cf5c.diff

 

本問い合わせは、以上で解決いたしました。
技術サポートチームでは、皆様からのお問い合わせに、迅速に対応できますよう、
社員一丸となって対応しております。

=========================================
■公式SNS
https://sns.openpne.jp/
OpenPNEユーザーの皆さんが気軽にコミュニケーションができるQ&Aサイトです。
どなたでも無料で利用できます。(facebook、google、twitter の各アカウントでログインが可能です。)

■技術サポートサービス
http://support.pne.jp/
OpenPNE開発元の手嶋屋が提供しているサービスです。
有料になりますがこちらにお申し込みいただきますと弊社のOpenPNE開発エンジニアがOpenPNEの様々なトラブルについて、調査・サポートさせていただきます。
今後とも、OpenPNE 技術サポートサービスをよろしくお願いいたします。