提问者:小点点

yii2使用ActiveController“无法解决请求”


我有一个简单的Yii2 REST应用程序。 参见:

如您所见,只有一个模型category,只有一个控制器categorycontroller

类别:

<?php

namespace api\models;

/**
 * This is the model class for table "{{%category}}".
 *
 * @property int $id
 * @property string $slug
 * @property string $title
 * @property int $enabled
 *
 */
class Category extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return '{{%category}}';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            ['enabled', 'default', 'value' => 0],
            [['title'], 'required'],
            [['enabled'], 'integer'],
            [['slug', 'title'], 'string', 'max' => 255],
            [['slug'], 'unique'],
        ];
    }
}

CategoryController:

<?php

namespace api\controllers;

use yii\rest\ActiveController;

/**
 * Class CategoryController
 *
 * @package api\controllers
 */
class CategoryController extends ActiveController
{
    public $modelClass = 'api\models\Category';

}

然后我将把我的应用程序配置钉在这里:

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__),
    'language' => 'ru-RU',
    'bootstrap' => ['log'],
    'controllerNamespace' => 'api\controllers',
    'components' => [
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ]
        ],
        'response' => [
            'class' => 'yii\web\Response',
            'format' => 'json'
        ],
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => true,
            'showScriptName' => false,
            'rules' => [
                [
                    'class' => 'yii\rest\UrlRule',
                    'controller' => 'category',
                ],
            ],
        ],
    ],
    'params' => $params,
];

我是怎么经营的? 很简单。 只需借助web目录中的$php-slocalhost:8900即可。

但是当我访问URL:localhost:8900/categories时,我看到以下内容:

{“名称”:“找不到”,“消息”:“找不到页。”,“代码”:0,“状态”:404,“类型”:“YII\Web\NotFoundHttpException”,“上一个”:{“名称”:“无效路由”,“消息”:“无法解析请求”Category/Index“。”,“代码”:0,“类型”:“YII\Base\InvalidRouteException”}}

什么意思? 我想Yii做了下面的东西。

  • 它尝试处理/categories请求(但由于某种原因,Yii无法执行此操作)
  • 然后框架在404函数上重定向我。 这就是为什么我们可以在这里看到“name”:“not found”,“message”:“page not found.”,“code”:0,“status”:404,“type”:“YII\\Web\\NotFoundHttpException”,

但是{“name”:“invalid route”,“message”:“无法解析请求”category/index“。”,“code”:0,“type”:“YII\\base\\InvalidRouteException”}的原因我不知道。

这一切都是奇怪的行为。 我只是试着按照这个官方指南,我的配置有什么问题?


共1个答案

匿名用户

您需要在CategoryController上指定索引方法。

即:

public function actionIndex()    
{
     return $this->render('index');
}

然后需要添加此方法的模板,或者