http://www.yiichina.com/doc/guide/2.0/structure-controllers
在“控制器ID”一节中这一特性被通过命名规范的方式规定。
错怪yii了。
还是要多看官网。
==16:51更新,以上为更新全文
最近由于工作(因为业余依旧沉迷阴阳师),开始正式研究php7和yii2。
今天试图通过pretty-url将所有/api/v1/action的请求转发到/apiv1下面来进行处理。
于是配置如下:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => false,
'showScriptName' => false,
'rules' => array('api/v1/' => 'apiv1/', '' => 'site/index','/'=>'/',)
],
然后,在apiv1的controller里面写了这样一个函数:
public function actionFinanceInfo()
{
$userObj = new \app\models\User();
return $userObj::find()->where(['id' => 1])
->one();
}
理论上是没问题的,但是死活就是404。无奈中翻看yii2的源码,发现路由这块的实现是:
public function createAction($id)
{
if ($id === '') {
$id = $this->defaultAction;
}
$actionMap = $this->actions();
if (isset($actionMap[$id])) {
return Yii::createObject($actionMap[$id], [$id, $this]);
} elseif (preg_match('/^[a-z0-9\\-_]+$/', $id) && strpos($id, '--') === false && trim($id, '-') === $id) {
$methodName = 'action' . str_replace(' ', '', ucwords(implode(' ', explode('-', $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;
}
竟然是一个将驼峰处理成连字符的函数。文档里貌似就没提到这一条啊。坑。
近期评论