2013-02-16 4 views
0

Я работаю над приложением, используя yii. У меня есть действие let acmanageappointments/index. Я определил свое правление, как следоватьКак обрабатывать ошибки в yii

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-адресу, он должен быть перенаправлен на страницу входа. Как я могу это сделать ?

обновление: Вот мои accessrules:

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 
+0

Какие еще правила доступа вы определили? – topher

+0

no i havent defined any other rule –

ответ

1

Как указано выше в комментариях, вам нужен метод filters.

Убедитесь, что это в вашем контроллере, иначе ваши правила доступа не будут делать ничего:

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

Если он работает, дайте свой ответ кредит, когда он обновляет его с этим фрагментом.

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('*'), 
), 
+0

thnx topher, я тоже это сделал, теперь у меня такая же проблема –

+0

во время серфинга Я видел, что мне нужно удалить yii_debug из index.php, whats taht точно –

+1

Не могли бы вы разместить свой ' метод accessRules'? – topher

0

Проверить значение $ user_id. если вы не вошли в систему, вы получите пустой $ user_id

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

При выполнении с этим критериям, которые вы получили SQL ошибку

1

Вы можете иметь настройки ErrorHandler в вашем конфигурационном файле «main.php»

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

это перенаправляет все исключения на предоставленный URL-адрес/ошибку в этом случае.

+0

СПАСИБО ankur ji bt, вещь, которую я забыл, - это тот, который Виллем Рензема объяснил ... –

Смежные вопросы