0

私は yii を使用してアプリケーションに取り組んでいます。アクション let がありacmanageappointments/indexます。そのルールを次のように定義しました

array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('index','create','update','delete','updatestatus'),
                'users'=>array('@'),

そのアクションは次のとおりです。

public function actionIndex()
    {

        $user_id = Yii::app()->user->getId();   
        $criteria = new CDbCriteria();
        $criteria->condition = 'user_id='.$user_id;
        $count=AcAppointments::model()->count($criteria);
        $pages=new CPagination($count);

        //results per page 
        $pages->pageSize=10;
        $pages->applyLimit($criteria);
        $AllAppointments = AcAppointments::model()->findAll($criteria);

        // Applying Global Date Time Format 
        $condition = array('user_id' => $user_id);
        $DTFormat = CalendarSettings::model()->findByAttributes($condition);

        $this->render('index',array(
                'AllAppointments' => $AllAppointments,
                'pages' => $pages,
                'DTFormat' => $DTFormat,
        ));


    }

このアクションは、認証された人物のみがアクセスできます。ログインすると、この機能は正しく機能しています。しかし、ログアウトしてこのアクションを実行すると、CDbException. この例外を処理するにはどうすればよいですか。また、ユーザーがログアウトしたときにこの URL にアクセスしようとすると、ログイン ページにリダイレクトする必要があります。これどうやってするの ?

更新:ここに私のアクセスルールがあります:

public function accessRules()
    {
        return array(
            array('allow', // allow authenticated user to perform 'create' and 'update' actions
                'actions'=>array('index','create','update','delete','updatestatus'),
                'users'=>array('@'),
            ),
            array('deny',  // deny all users
                'users'=>array('*'),
            ),
        );
    }

ここにエラーがあります:

CDbCommand failed to execute the SQL statement: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
4

4 に答える 4

1

コメントで言及されているように、filtersメソッドが必要です。

コントローラにこれがあることを確認してください。そうでない場合、アクセスルールは何もしません。

public function filters()
{
    return array(
        'accessControl', 
    );
}

それが機能する場合は、彼がこのスニペットで更新するときに、彼の回答クレジットを与えてください。

于 2013-02-16T16:27:29.573 に答える
1

認証されていないユーザーがアクセスを拒否されるようにする別のルールを定義する必要があります。これが最後のルールでなければなりません。

array('allow', // allow authenticated user to perform 'create' and 'update' actions
    'actions'=>array('index','create','update','delete','updatestatus'),
    'users'=>array('@'),
),
array('deny',
    'users'=>array('*'),
),
于 2013-02-16T11:33:29.677 に答える
1

構成ファイル「main.php」にerrorHandler設定を含めることができます

'components'=>array(
    ...............
    ...............
    'errorHandler'=>array(
    // use 'site/error' action to display errors
    'errorAction'=>'site/error',
    ),
    ...............
    ...............
)

これにより、すべての例外が指定された URL サイト/エラーにリダイレクトされます。

于 2013-06-06T17:19:32.437 に答える
0

値 $user_id を確認してください。ログインしていない場合は、空の $user_id が返されます

$user_id = Yii::app()->user->getId();   
$criteria = new CDbCriteria();
$criteria->condition = 'user_id='.$user_id;

この基準で実行すると、SQL エラーが発生しました

于 2013-02-17T06:33:18.567 に答える