2014-12-03 27 views
1

我有一個控制器,根據?id=有一個來自數據庫的顯示數據,它工作正常。但是,如果你不給任何值ID獲取錯誤

error 400 Your request is invalid.

我的代碼:

public function actionIndex($id) 
     { 
      // renders the view file 'protected/views/site/index.php' 
      // using the default layout 'protected/views/layouts/main.php' 

      $this->pageTitle = 'Page'; 

       $criteria = new CDbCriteria(
        array(
         'condition' => 'name = :Name', 
         'params' => array(':Name' => $id), 
//if $id is not defined then error 

        ) 
       ); 
      } 
      $ModelPages = Pages::model()->findAll($criteria); 
      $this->render('index', 
        array(
         'Model' => $ModelPages, 
        ) 
       ); 
     } 

我以這樣的方式嘗試了這一點,但它並沒有幫助。

public function actionIndex($id) 
    { 
     // renders the view file 'protected/views/site/index.php' 
     // using the default layout 'protected/views/layouts/main.php' 

     $this->pageTitle = 'Page'; 

     if(empty($id)){ 
      $criteria = new CDbCriteria(
       array(
        'condition' => 'name = :Name', 
        'params' => array(':Name' => 'index'), 
       ) 
      ); 
     } 
     else { 

      $criteria = new CDbCriteria(
       array(
        'condition' => 'name = :Name', 
        'params' => array(':Name' => $id), 
       ) 
      ); 


     } 
     $ModelPages = Pages::model()->findAll($criteria); 
     $this->render('index', 
       array(
        'Model' => $ModelPages, 
       ) 
      ); 

    } 

當我根據網站顯示內容時,我的解決方案是否正確(安全)?

+0

我剛剛編輯答案 – Goodnickoff 2014-12-03 15:43:47

回答

0

您的解決方案是正確的,但更好地利用用於獲取GET參數和處理錯誤getQuery()方法,如果沒有發現網頁:

public function actionIndex($id='index') //Notice the default parameter value 
{ 
    $id = Yii::app()->request->getQuery('id', 'index') //if id GET parameter does not exist $id will be 'index' 
    $criteria = new CDbCriteria(
     array(
      'condition' => 'name = :Name', 
      'params' => array(':Name' => $id), 
     ) 
    ); 
    $ModelPages = Pages::model()->findAll($criteria); 

    if (empty($ModelPages)) { 
     throw new CHttpExeption(404,'page not found'); 
    } 

    $this->render('index', 
     array(
      'Model' => $ModelPages, 
     ) 
    ); 
} 

此外,如果你的行動無法接收id參數,你應該爲它的默認值( actionIndex($id='index')

0

嘗試只是這樣

public function actionIndex($id) 
    { 
     if(isset($id) && $id>0) 
     { 
      $this->pageTitle = 'Page'; 
      $criteria = new CDbCriteria(
       array(
        'condition' => 'name = :Name', 
        'params' => array(':Name' => $id), 
       ) 
      ); 
      $ModelPages = Pages::model()->findAll($criteria); 

      $this->render('index', 
       array(
        'Model' => $ModelPages, 
       ) 
      ); 
    }else 
     throw new CHttpException(404,'invalid request'); 
}