当前位置: 首页 > 知识库问答 >
问题:

yii2 API 404-高级模板

於意蕴
2023-03-14

我在高级模板中设置API应用程序时遇到了Yi2问题。我无法获得任何输入,只能通过API的v1调用模块的404

我想打给API地址是http://localhost/HeyConference/api/v1/country

我有以下教程/模板:

  • http://www.yiiframework.com/forum/index.php/topic/69123-error-while-creating-a-rest-api-in-yii2-advanced-template-closed/

以及请求支持同样的问题,没有成功。

Yii版本:2.0.10 PHP版本:5.6.23和PHP版本:5.5(XAMP)

我怀疑问题出在我的配置上

我的文件结构是:

  • _保护
    • 原料药
      • 配置
        • bootstrap.php
        • main.php
        • main local.php
        • params.php
        • params local.php
        • SiteController.php
        • v1
        • Country.php
        • 资产
        • . htaccess
        • index.php
        • 索引
        • test.php
        • robots.txt

        以下是具体的文件:

        index.php

        <?php
        defined('YII_DEBUG') or define('YII_DEBUG', true);
        defined('YII_ENV') or define('YII_ENV', 'dev');
        require(__DIR__ . '/../_protected/vendor/autoload.php');
        require(__DIR__ . '/../_protected/vendor/yiisoft/yii2/Yii.php');
        require(__DIR__ . '/../_protected/common/config/bootstrap.php');
        require(__DIR__ . '/../_protected/api/config/bootstrap.php');
        $config = yii\helpers\ArrayHelper::merge(
            require(__DIR__ . '/../_protected/common/config/main.php'),
            require(__DIR__ . '/../_protected/common/config/main-local.php'),
            require(__DIR__ . '/../_protected/api/config/main.php'),
            require(__DIR__ . '/../_protected/api/config/main-local.php')
        );
        $application = new yii\web\Application($config);
        $application->run();
        

        _受保护的/api/config/main.php

        <?php
        $params = array_merge(
            require(__DIR__ . '/../../common/config/params.php'),
            require(__DIR__ . '/../../common/config/params-local.php'),
            require(__DIR__ . '/params.php'),
            require(__DIR__ . '/params-local.php')
        );
        return [
            'id' => 'app-api',
            'basePath' => dirname(__DIR__),
            //'controllerNamespace' => 'api\controllers',
            //'controllerNamespace' => 'api\modules\v1\controllers',
            'bootstrap' => ['log'],
            'modules' => [
                'v1' => [
                    'basePath' => '@api/modules/v1',
                    'class' => 'api\modules\v1\Module',   // here is our v1 modules
                    'controllerNamespace' => 'api\modules\v1\controllers',
                ]
            ],
            'components' => [
                'user' => [
                    'identityClass' => 'common\models\UserIdentity',
                    'enableAutoLogin' => false,
                ],
                'log' => [
                    'traceLevel' => YII_DEBUG ? 3 : 0,
                    'targets' => [
                        [
                            'class' => 'yii\log\FileTarget',
                            'levels' => ['error', 'warning'],
                        ],
                    ],
                ],
                'urlManager' => [
                    'enablePrettyUrl' => true,
                    'enableStrictParsing' => false, //true,
                    'showScriptName' => false,
                    'rules' => [
                        [
                            //'pluralize' => false,
        
                            'class' => 'yii\rest\UrlRule',
        
                            'controller' => ['v1/country', 'v1/conference'],
                            'tokens' => [
                                '{id}' => '<id:\\w+>'
                            ]
                        ]
                    ],
                ]
            ],
            'params' => $params,
        ];
        

        _受保护的/api/modules/v1/Module.php

        <?php
        namespace api\modules\v1;
        class Module extends \yii\base\Module
        {
            public $controllerNamespace = 'api\modules\v1\controllers';
            public function init()
            {
                parent::init();
            }
        }
        

        _受保护的/api/modules/v1/controllers/Country.php

        <?php
        namespace api\modules\v1\controllers;
        use yii\rest\ActiveController;
        class ConferenceController extends ActiveController
        {
            public $modelClass = 'api\modules\v1\models\Conference';
        }
        

        _受保护的/api/modules/v1/controllers/Country.php

        <?php
        namespace api\modules\v1\controllers;
        use yii\rest\ActiveController;
        /**
         * Country Controller API
         *
         * @author alex
         */
        class CountryController extends ActiveController
        {
            public $modelClass = 'api\modules\v1\models\Country';
        }
        

        .htaccess文件:

        RewriteEngine on
        
        # If a directory or a file exists, use the request directly
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        # Otherwise forward the request to index.php
        RewriteRule . index.php
        

共有1个答案

沈长恨
2023-03-14

我发现你的控制器没有遵循Yii2约定。它们应该被称为xxx控制器。

因此,您的文件应该命名为\u protected/api/modules/v1/controllers/Country.php,而不是\u protected/api/modules/v1/controllers/CountryController.php

 类似资料:
  • 虽然大多数和Django模板语言的交互都是模板作者的工作,但你可能想定制和扩展模板引擎,让它做一些它不能做的事情,或者是以其他方式让你的工作更轻松。 本章深入探讨Django的模板系统。 如果你想扩展模板系统或者只是对它的工作原理感觉到好奇,本章涉及了你需要了解的东西。 它也包含一个自动转意特征,如果你继续使用django,随着时间的推移你一定会注意这个安全考虑。 如果你想把Django的模版系统

  • 第十章 “trait:定义共享的行为” 部分,我们第一次涉及到了 trait,不过就像生命周期一样,我们并没有覆盖一些较为高级的细节。现在我们更加了解 Rust 了,可以深入理解其本质了。 关联类型(associated types)是一个将类型占位符与 trait 相关联的方式,这样 trait 的方法签名中就可以使用这些占位符类型。trait 的实现者会针对特定的实现在这个类型的位置指定相应的

  • 变量(80%) 综述 在Nginx中同一个请求需要在模块之间数据的传递或者说在配置文件里面使用模块动态的数据一般来说都是使用变量,比如在HTTP模块中导出了host/remote_addr等变量,这样我们就可以在配置文件中以及在其他的模块使用这个变量。在Nginx中,有两种定义变量的方式,一种是在配置文件中,使用set指令,一种就是上面我们提到的在模块中定义变量,然后导出. 在Nginx中所有的变

  • 当我尝试部署Yii2高级模板时,我总是会遇到一个无法工作的应用程序。 错误消息是: 无效参数–yii\base\InvalidParamException要发布的文件或目录不存在:[……]/yii应用程序/供应商/鲍尔/jquery/dist 我尝试通过最新的composer版本进行安装,无论是否使用fxp资产插件。两种情况下的错误消息相同。 我使用官方文档在我的Ubuntu64 16.04 We

  • 基础章节介绍了如何组织简单的 Redux 应用。在这一章节中,将要学习如何使用 AJAX 和路由。 异步 Action 异步数据流 Middleware 搭配 React Router 搭配 TypeScript 示例:Reddit API 下一步

  • 这一部分,我们将深入探讨 redux-saga 提供的更强大的 Effect。 链接 监听未来的 action 无阻塞调用 同时执行多个任务 在多个 Effects 之间启动 race 通过 yield* 对 Sagas 进行排序 组合 Sagas 任务的取消 常见的并发模式 Sagas 测试示例 连接 Sagas 至外部输入和输出