2014-09-06 3 views
0

я следующий код в начале контроллера (я использую Yii):Не реагирует, как ожидалось

protected function beforeAction($action = null) 
{ 
    switch ($this->action->id) 
    { 
     case 'Images': 
      // Do something 
      break; 

      // ... 
    } 

    if ($this->action->id == 'index' || $this->action->id == 'videos') 
    { 
     // Do something else 
    } 

    return true; 
} 

public function actionIndex() 
{ 
    // ... 
} 

public function actionVideos() 
{ 
    // ... 
} 

public function actionImages() 
{ 
    // ... 
} 

Как вы можете видеть, как если оператор и оператор переключатель используется $ this-> action-> id, который возвращает имя действия.

Проблема, заключающаяся в том, что оператор switch принимает только «образы», ​​причем заглавную букву почему-то, а $ this-> action-> id возвращает строчную строку.

Я даже попробовал написать другую инструкцию if вместо коммутатора - но та же проблема.

Плюс, попытался проверить строку $ this-> action-> id, возвращает как на actionImages(), так и на остальные - все это нижние регионы.

ответ

2

Вы можете написать свой случай заявление в нижнем регистре или вы можете использовать ucfirst ($ this-> action-> идентификатор), как этот

protected function beforeAction($action = null) 
{ 
    $var=ucfirst($this->action->id); 
    switch ($var) 
    { 
     case 'Images': 
      // Do something 
      break; 

      // ... 
    } 

    if ($this->action->id == 'index' || $this->action->id == 'videos') 
    { 
     // Do something else 
    } 

    return true; 
} 

public function actionIndex() 
{ 
    // ... 
} 

public function actionVideos() 
{ 
    // ... 
} 

public function actionImages() 
{ 
    // ... 
} 
+0

Спасибо, оказывается, что это была моя ошибка. – user3803707

1

изменить регистр букв проверки strtolower() и ucfirst() методы

1

попытаться define Струны и посмотреть, если они совпадают в обоих заявлениях. Также проверьте источник action->id и то, что он возвращает.