Php 无法路由到Yii2控制器中的自定义操作

Php 无法路由到Yii2控制器中的自定义操作,php,yii,yii2,Php,Yii,Yii2,我正在用Yii2(高级)构建一个restfulapi,除了我需要的自定义API之外,端点也能正常工作 我的urlManager看起来像: 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, 'rules' => ['class' => 'yii\rest\

我正在用Yii2(高级)构建一个restfulapi,除了我需要的自定义API之外,端点也能正常工作

我的
urlManager
看起来像:

        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => 
                ['class' => 'yii\rest\UrlRule', 'controller' => 'api/v1/step', 'pluralize' => false],
    ],
如果我像这样在StepController中添加一个自定义操作,它将很好地工作-使用
http://example.com/api/v1/step/test

public function actionTest()
但是,如果我想通过路径传入ID,我将收到404错误-
http://example.com/api/v1/step/test/1

public function actionTest($id)
有什么我遗漏的吗

编辑:添加可能帮助他人的注释

我上面的例子被简化了,但我希望我的URL看起来像
http://example.com/api/v1/step/test-by-foobar/1
调用的方法是
公共函数actionTestByFoobar($id)
。但是,要使其正常工作,您必须设置urlManager规则,如下所示,我没有发现这一点:

'api/v1/step/test-by-foobar/1' => 'api/v1/step/test-by-foobar',

请注意,该值是连字符的,而不是驼峰式。

通过代码,您可以传递如下id:

http://example.com/api/v1/step/test?id=1
但如果你想这样做:

http://example.com/api/v1/step/test/1
您应该像下面那样重写url:

'urlManager' => [
     'enablePrettyUrl' => true,
     'showScriptName' => false,
     'rules' => [
            ['class' => 'yii\rest\UrlRule', 
             'controller' => 'api/v1/step', 
             'pluralize' => false
            ],

            /* You are missing this line below */
            'api/v1/step/test/<id:\d+>' => 'api/v1/step/test'
     ]
],
'urlManager'=>[
“enablePrettyUrl”=>true,
'showScriptName'=>false,
“规则”=>[
['class'=>'yii\rest\UrlRule',
“控制器”=>“api/v1/step”,
“多元化”=>错误
],
/*您缺少下面这一行*/
“api/v1/step/test/”=>“api/v1/step/test”
]
],

谢谢。我试过了,但显然是错误的。它正在工作。