我在控制器的开头有以下代码(我正在使用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()
{
// ...
}
如您所见,if语句和switch语句都使用$ this-> action-> id,它返回操作名称。
在switch语句中,它只接受“Images”,大写字母为什么,而$ this-> action-> id返回一个小写字符串。
我甚至尝试编写另一个if语句而不是切换 - 但同样的问题。
另外,尝试检查字符串$ this-> action-> id返回actionImages()和其他 - 都是小写。
答案 0 :(得分:2)
您可以用小写编写case语句 要么 您可以像这样使用ucfirst($ this-> action-> id)
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()
{
// ...
}
答案 1 :(得分:1)
更改字母的大小写
检查strtolower()
和ucfirst()
方法
答案 2 :(得分:1)
尝试define
字符串,看看它们是否在两个语句中匹配。还要检查action->id
的来源及其返回的内容。