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

时间:2018-04-06 05:42:16

标签: php yii yii2

我正在使用Yii2(高级)构建RESTful 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)

我有什么遗失的吗?

编辑:添加可能有助于他人的笔记。

我上面的示例已经过简化,但我希望我的网址看起来像http://example.com/api/v1/step/test-by-foobar/1,被调用的方法是public function actionTestByFoobar($id)。但是要使其工作,你必须设置urlManager规则,如下所示,我没有发现明显的:

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

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

1 个答案:

答案 0 :(得分:2)

使用您的代码,您可以传递这样的ID:

http://example.com/api/v1/step/test?id=1

但如果你想这样做:

http://example.com/api/v1/step/test/1

您应该重写以下网址:

'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'
     ]
],