[英]Yii2 UrlManager REST API GET 404 error when giving id parameter
我已经使用Yii2基本模板制作了REST API。 我对webconfig进行了一些更改,因此可以使用诸如web / users和web / users / 1之类的链接。 它工作正常,但我无法再访问网络/索引。 因此,我向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 /索引。 我还可以访问网站/用户以获取用户列表。 但我无法访问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+>']],
],
],
我已经这样改变了。 现在,由于多元化,我可以访问网站。 但是,例如,如果我访问网站/站点/大约,它将再次出现404错误。 所以这不是最好的解决方案
我认为在同一个配置文件中维护REST API和HTML网页并不容易。 例如,Cookie和会话通常会按照其无状态性质的建议使用REST禁用,而您可能同时需要在经典HTML页面中对用户进行身份验证。
我建议您修改您的应用程序结构,并将REST API作为具有独立路由配置以及可能具有其自己的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
。 查看此分步教程,了解如何实现它:
为Yii2-basic-template创建REST API- Joachim Werner
您还可以在此应用中检查api
和auth
文件夹,它们都是独立的REST API。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.