繁体   English   中英

给id参数时,Yii2 UrlManager REST API GET 404错误

[英]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检索资源。 每个条目可以承载自己的controllersmodels或者它们都可以共享@app/models 查看此分步教程,了解如何实现它:

为Yii2-basic-template创建REST API- Joachim Werner

您还可以在此应用中检查apiauth文件夹,它们都是独立的REST API。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM