Не могу сконфигурирвать Yii2 под rest. Всегда дает 404

У меня один контроллер CategoryController и одна модель Category.

Вот контроллер

<?php

namespace api\controllers;

use yii\rest\ActiveController;

class CategoryController extends ActiveController
{
    public $modelClass = 'api\models\Category';
}

Вот модель

<?php

namespace api\models;

use Yii;

/**
 * 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'],
        ];
    }
}

Моя конфигурация приложения (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-frontend',
    'basePath' => dirname(__DIR__),
    'language' => 'ru-RU',
    'bootstrap' => ['log'],
    'controllerNamespace' => 'api\controllers',
    'components' => [
        'user' => [
            'identityClass' => 'common\models\User',
            'enableAutoLogin' => true,
            'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
        ],
        'request' => [
            'parsers' => [
                'application/json' => yii\web\JsonParser::class
            ]
        ],
        'response' => [
            'class' => yii\web\Response::class,
            'format' => 'json'
        ],
        'log' => [
            'traceLevel' => YII_DEBUG ? 3 : 0,
            'targets' => [
                [
                    'class' => 'yii\log\FileTarget',
                    'levels' => ['error', 'warning'],
                ],
            ],
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'enableStrictParsing' => false,
            'showScriptName' => false,
            'rules' => [
                [
                    'class' => 'yii\rest\UrlRule',
                    'controller' => 'category',
                ]
            ],
        ],
    ],
    'params' => $params,
];

Общая структура приложения:

введите сюда описание изображения

Запускаю я это следующим образом. Перехожу в папку web в приложении api и набираю

$ php -S localhost:8900

Результат перехода по урлу http://localhost:8900/categories :

{"name":"Not Found","message":"Страница не найдена.","code":0,"status":404,"type":"yii\\web\\NotFoundHttpException","previous":{"name":"Invalid Route","message":"Unable to resolve the request \"\".","code":0,"type":"yii\\base\\InvalidRouteException"}}

Пробовал запускать из докера.

Вот мой docker-compose:

version: '3.2'

services:

  api:
    build: api
    ports:
      - 22080:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app

  frontend:
    build: frontend
    ports:
      - 20080:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app

  backend:
    build: backend
    ports:
      - 21080:80
    volumes:
      # Re-use local composer cache via host-volume
      - ~/.composer-docker/cache:/root/.composer/cache:delegated
      # Mount source-code for development
      - ./:/app

  mysql:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=verysecret
      - MYSQL_DATABASE=yii2advanced
      - MYSQL_USER=yii2advanced
      - MYSQL_PASSWORD=secret
      - MYSQL_ROOT_HOST=%
    ports:
      - 3306:3306

И докер файл для проекта api:

FROM yiisoftware/yii2-php:7.2-apache

# Change document root for Apache
RUN sed -i -e 's|/app/web|/app/api/web|g' /etc/apache2/sites-available/000-default.conf

Тот же результат. Таблица category заполнена. Что же не так? Помогите, пожалуйста, задолбался уже (((


Ответы (1 шт):

Автор решения: Aleksej_Shherbak

В общем, ничего сложного. Если разрабатываете копипастой приложений, как я, (был frontend, я скопировал и переименовал в api), не забудьте обновить common/config/bootstrap.php. Как уже сказал, мое новое приложение называется api, а мой bootstrap.php выглядит:

<?php
Yii::setAlias('@common', dirname(__DIR__));
Yii::setAlias('@frontend', dirname(dirname(__DIR__)) . '/frontend');
Yii::setAlias('@backend', dirname(dirname(__DIR__)) . '/backend');
Yii::setAlias('@console', dirname(dirname(__DIR__)) . '/console');
Yii::setAlias('@api', dirname(dirname(__DIR__)) . '/api');

Вот, если кого то интересуют подробности поиска https://github.com/yiisoft/yii2/issues/18087

→ Ссылка