Yii2 UrlManager REST API 提供 id 参数时出现 GET 404 错误
Yii2 UrlManager REST API GET 404 error when giving id parameter
我用 Yii2 基本模板制作了一个 REST API。我对 webconfig 做了一些更改,因此我可以使用像 web/users 和 web/users/1 这样的链接。它工作正常,但我无法再访问 web/index。所以我向 UrlManager 添加了更多规则。
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
//basic/web
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:[\d]+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
//basic/web/users
['class' => 'yii\rest\UrlRule', 'controller' => ['user', 'car']],
//basic/web/countries
//Id is een string, vandaar de tokens
['class' => 'yii\rest\UrlRule', 'controller' => 'country', 'tokens' => ['{id}' => '<id:\w+>']],
],
],
通过上面的代码我可以访问web/index。我还可以访问 web/users 来获取用户列表。但我无法访问 web/users/1。它给出了 404 错误。
编辑:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
//basic/web
/*
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:[\d]+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
*/
//basic/web/users
['class' => 'yii\rest\UrlRule', 'controller' => ['user', 'car', 'site']],
//basic/web/countries
//Id is een string, vandaar de tokens
['class' => 'yii\rest\UrlRule', 'controller' => 'country', 'tokens' => ['{id}' => '<id:\w+>']],
],
],
我改成这样了。现在我可以访问 web/sites 因为复数化。
但是如果我去 web/sites/about 例如,它会再次给出 404 错误。所以这不是最好的解决方案
我认为在同一个配置文件中维护 REST API 和 HTML 网页并不容易。例如,根据 REST 的无状态特性,cookie 和会话通常被禁用,而您可能需要在经典 HTML 页面中对用户进行身份验证。
我建议修改您的应用程序结构并将您的 REST API 作为独立的 module with its own routing configuration and maybe its own Entry Script 实施,而不会丢失 web
条目。
更好的结构可能如下所示:(来自下面链接的教程)
+ web
+ config
+ controllers
...
+ api
+ config
+ modules
+ v1
+ controllers
.htaccess
index.php
然后您将能够在 web/sites/about
中打开您的 HTML 文件,同时在 api/users/1
中检索您的资源。每个条目可以拥有自己的 controllers
和自己的 models
,或者它们可以共享 @app/models
。查看此分步教程以了解如何实现它:
Creating a REST API for
Yii2-basic-template
- by Joachim Werner
您还可以检查 this app 中的 api
和 auth
文件夹,它们都是独立的 REST APIs。
我用 Yii2 基本模板制作了一个 REST API。我对 webconfig 做了一些更改,因此我可以使用像 web/users 和 web/users/1 这样的链接。它工作正常,但我无法再访问 web/index。所以我向 UrlManager 添加了更多规则。
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
//basic/web
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:[\d]+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
//basic/web/users
['class' => 'yii\rest\UrlRule', 'controller' => ['user', 'car']],
//basic/web/countries
//Id is een string, vandaar de tokens
['class' => 'yii\rest\UrlRule', 'controller' => 'country', 'tokens' => ['{id}' => '<id:\w+>']],
],
],
通过上面的代码我可以访问web/index。我还可以访问 web/users 来获取用户列表。但我无法访问 web/users/1。它给出了 404 错误。
编辑:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
//basic/web
/*
'<controller:\w+>/<id:\d+>' => '<controller>/view',
'<controller:[\w\-]+>/<action:[\w\-]+>/<id:[\d]+>' => '<controller>/<action>',
'<controller:\w+>/<action:\w+>' => '<controller>/<action>',
*/
//basic/web/users
['class' => 'yii\rest\UrlRule', 'controller' => ['user', 'car', 'site']],
//basic/web/countries
//Id is een string, vandaar de tokens
['class' => 'yii\rest\UrlRule', 'controller' => 'country', 'tokens' => ['{id}' => '<id:\w+>']],
],
],
我改成这样了。现在我可以访问 web/sites 因为复数化。 但是如果我去 web/sites/about 例如,它会再次给出 404 错误。所以这不是最好的解决方案
我认为在同一个配置文件中维护 REST API 和 HTML 网页并不容易。例如,根据 REST 的无状态特性,cookie 和会话通常被禁用,而您可能需要在经典 HTML 页面中对用户进行身份验证。
我建议修改您的应用程序结构并将您的 REST API 作为独立的 module with its own routing configuration and maybe its own Entry Script 实施,而不会丢失 web
条目。
更好的结构可能如下所示:(来自下面链接的教程)
+ web
+ config
+ controllers
...
+ api
+ config
+ modules
+ v1
+ controllers
.htaccess
index.php
然后您将能够在 web/sites/about
中打开您的 HTML 文件,同时在 api/users/1
中检索您的资源。每个条目可以拥有自己的 controllers
和自己的 models
,或者它们可以共享 @app/models
。查看此分步教程以了解如何实现它:
Creating a REST API for Yii2-basic-template - by Joachim Werner
您还可以检查 this app 中的 api
和 auth
文件夹,它们都是独立的 REST APIs。