0

現在ログインしているユーザーが一連のアクションの有料メンバーであるかどうかを確認する要件があります。ユーザーが有料会員でない場合は、会員登録ページに移動する必要があります。以下はコードです。コントローラー内 (Yii フレームワーク)

public function accessRules()
{  return array(

        array('allow', 
            'actions'=>array('enroll','index','admin','suggesttags'),
            'users'=>array('@'),
            ),
        array('allow', 
            'actions'=>array('view', 'read'),
            'users'=>array(Yii::app()->user->name),
            'expression' => 'Yii::app()->controller->hasPaied()'
            ),

現在、hasPayed()関数は未払いのメンバーに対して false を返し、現在、ユーザーは 403 例外にリダイレクトされます。

403 例外ページをカスタマイズして、「メンバーになる」ページを作成したいと考えています。それを行う方法はありますか?この特定から発生したすべての例外controller\actionがメンバーシップ取得ページに送信され、残りの 403 例外が変更されないようにするには?

4

1 に答える 1

1

CAccessControlerFilterからのdeniedCallbackを使用してみてください。

// optional, the denied method callback name, that will be called once the
// access is denied, instead of showing the customized error message. It can also be
// a valid PHP callback, including class method name (array(ClassName/Object, MethodName)),
// or anonymous function (PHP 5.3.0+). The function/method signature should be as follows:
// function foo($user, $rule) { ... }
// where $user is the current application user object and $rule is this access rule.
// This option is available since version 1.1.11.
'deniedCallback'=>'redirectToDeniedMethod',
于 2013-07-08T15:34:49.813 に答える