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

时间:2016-02-04 15:37:39

标签: php api rest yii2 yii2-basic-app

我使用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 / 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 /例如,它将再次给出404错误。所以它不是最好的解决方案

1 个答案:

答案 0 :(得分:1)

我认为在同一个配置文件中维护REST API和HTML网页并不容易。例如,cookie和会话通常由其无状态性质的建议使用REST禁用,而您可能需要在经典HTML页面中对用户进行身份验证。

我建议修改您的应用结构,并将您的REST API实现为具有自己的路由配置的独立module,并且可能是自己的Entry Script,而不会错过web条目。< / p>

更好的结构可能如下所示:(来自下面链接的教程)

+ web
+ config
+ controllers
...
+ api
  + config
  + modules
    + v1
      + controllers
  .htaccess
  index.php

然后,您可以在web/sites/about内检索资源时在api/users/1内打开HTML文件。每个条目可以托管自己的controllers和自己的models,也可以共享@app/models。请查看此分步教程以了解如何实现它:

  

Creating a REST API for Yii2-basic-template    - 作者:Joachim Werner

您还可以检查this appapiauth个文件夹,其中两个文件夹都是独立的REST API。