见 Yii\base\Controller
中 createAction
函数:
...
public function createAction($id)
{
if ($id === '') {
$id = $this->defaultAction;
}
$actionMap = $this->actions();
if (isset($actionMap[$id])) {
return Yii::createObject($actionMap[$id], [$id, $this]);
}
if (preg_match('/^(?:[a-z0-9_]+-)*[a-z0-9_]+$/', $id)) {
$methodName = 'action' . str_replace(' ', '', ucwords(str_replace('-', ' ', $id)));
if (method_exists($this, $methodName)) {
$method = new \ReflectionMethod($this, $methodName);
if ($method->isPublic() && $method->getName() === $methodName) {
return new InlineAction($id, $this, $methodName);
}
}
}
return null;
}
看到正则 /^(?:[a-z0-9_]+-)*[a-z0-9_]+$/
了吗? 如果没有特别的处理,比如重写 actions
函数,那么路由中 editCityArea
这么写,会导致 :
yii\web\NotFoundHttpException: 页面未找到