@Muramidaza

Yii не находит класс в контроллере. В чем может быть проблема?

Пробую сделать RESTFull API на Yii2. До этого делал RESTFull только на ларавеле. Сначала решил попробовать по инструкции https://www.yiiframework.com/doc/guide/2.0/ru/rest.... Делаю в опенсервере. Установил версию basic. Страница index открылась, Gii тоже открылся. Подключил базу данных в конфиге. Далее по инструкции создал контроллер User в папке C:\OSPanel\domains\testYii2\controllers:

namespace app\controllers;

use yii\rest\ActiveController;

    class UserController extends ActiveController
    {
        public $modelClass = 'app\models\User';
    }


Вставил
'urlManager' => [
    'enablePrettyUrl' => true,
    'enableStrictParsing' => true,
    'showScriptName' => false,
    'rules' => [
        ['class' => 'yii\rest\UrlRule', 'controller' => 'user'],
    ],
]


и

'request' => [
    'parsers' => [
        'application/json' => 'yii\web\JsonParser',
    ]
]


в файл C:\OSPanel\domains\testYii2\config\web.php

При попытке сделать по инструкции

curl -i -H "Accept:application/json" "testyii2/users"

Получаю

$ curl -i "testyii2/users"
HTTP/1.1 200 OK
Date: Sat, 19 Dec 2020 14:56:56 GMT
Server: Apache
Content-Length: 2104
Content-Type: text/html; charset=UTF-8

namespace app\controllers;

use yii\rest\ActiveController;

class UserController extends ActiveController

public $modelClass = 'app\models\User';
}An Error occurred while handling another error:
yii\web\HeadersAlreadySentException: Headers already sent in C:\OSPanel\domains\testYii2\controllers\UserController.php on line 1. in C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\web\Response.php:370
Stack trace:
#0 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\web\Response.php(343): yii\web\Response->sendHeaders()
#1 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\web\ErrorHandler.php(136): yii\web\Response->send()
#2 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\base\ErrorHandler.php(135): yii\web\ErrorHandler->renderException(Object(yii\base\UnknownClassException))
#3 [internal function]: yii\base\ErrorHandler->handleException(Object(yii\base\UnknownClassException))
#4 {main}
Previous exception:
yii\base\UnknownClassException: Unable to find 'app\controllers\UserController' in file: C:\OSPanel\domains\testYii2/controllers/UserController.php. Namespace missing? in C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\BaseYii.php:296
Stack trace:
#0 [internal function]: yii\BaseYii::autoload('app\\controllers...')
#1 [internal function]: spl_autoload_call('app\\controllers...')
#2 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\base\Module.php(637): class_exists('app\\controllers...')
#3 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\base\Module.php(596): yii\base\Module->createControllerByID('user')
#4 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\base\Module.php(522): yii\base\Module->createController('index')
#5 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\web\Application.php(104): yii\base\Module->runAction('user/index', Array)
#6 C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\base\Application.php(392): yii\web\Application->handleRequest(Object(yii\web\Request))
#7 C:\OSPanel\domains\testYii2\web\index.php(12): yii\base\Application->run()
#8 {main}

То есть не находит контроллер UserController?

Previous exception:
yii\base\UnknownClassException: Unable to find 'app\controllers\UserController' in file: C:\OSPanel\domains\testYii2/controllers/UserController.php. Namespace missing? in C:\OSPanel\domains\testYii2\vendor\yiisoft\yii2\BaseYii.php:296


Не может ли это быть из за разных слешей:

C:\OSPanel\domains\testYii2/controllers/UserController.php

Как решить эту проблему?
  • Вопрос задан
  • 325 просмотров
Пригласить эксперта
Ответы на вопрос 1
@bashcod
<?php
namespace Foo;
?>

Должно выглядеть так. Между "namespace" и "<?php" не должно быть лишних символов. Не используйте короткий тег "<?".
Слеши д.б. непричем.
Возможно, не корректная кодировка файла. Нужно использовать UTF8 without BOM (если так, найдите себе нормальный редактор).
Еще один вариант - некорректное пространство app. Посмотрите, что написано в "соседних" контроллерах.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы