Класс CakePHP не найден с использованием пользовательского класса - PullRequest
0 голосов
/ 05 июня 2018

Я только начал использовать CakePHP 3. Я пытаюсь начать работу, но выполнение простейших действий оказывается головной болью.

У меня есть класс MySimpleClass в src/App/MySimpleClass.php

<?php
    namespace MyApp\MyNamespace;

    class MySimpleClass {
        public function aSimpleFunction() {
            return 1;
        }
    }

И в моем контроллере:

<?php
    namespace App\Controller;

    use Cake\Controller\Controller;
    use MyApp\MyNamespace\MySimpleClass;

    class MyFirstController extends Controller {

        public function display() {
            $mySimpleClass = new MySimpleClass();
            echo $mySimpleClass->aSimpleFunction();
        }
    }

Но это всегда дает мне: Error in: ROOT/src/Controller/TestController.php, line 10 Class 'MyApp\MyNamespace\MySimpleClass' not found

Я использую bin/cake server для запуска HTTP-сервера

Я добавил App::className('MyApp\MyNamespace\MySimpleClass'); к bootstrap.php, чтобы посмотреть, изменится ли это, но это не так.

Я несколько раз запускал composer dump-autoload.

Я пытался поместить MySimpleClass в глобальное пространство имен, но он все еще выдавал ошибку.

PHPStorm не дает мне никаких синтаксических ошибок или ошибок именования.

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Не важно, я наконец нашел решение ...

Мне просто нужно было добавить src к карте классов в composer.json:

"autoload": {
    "classmap": [
        "src"
    ],
    ...,
}

Редактировать:

Вместо того, чтобы злоупотреблять картой классов, я просто переместил свои файлы классов в каталог за пределами src

0 голосов
/ 07 июня 2018

Если ваш класс находится в файле src / App / MySimpleClass.php, пространство имен должно быть App\App.Первый App относится к корневому пространству имен каждого приложения CakePHP 3.x, второй App относится к подкаталогу в каталоге src, в который вы помещаете свой файл класса.

Если пространство именкласс должен быть App\MyNamespace, ваш файл класса должен находиться в src/MyNamespace.

Также: согласно сообщению об ошибке, которое вы указали, ваш MyFirstController находится в файле с именем TestController.php.Вместо этого это должен быть MyFirstController.php.Я рекомендую прочитать https://book.cakephp.org/3.0/en/intro/conventions.html#file-and-class-name-conventions по этой теме.

0 голосов
/ 05 июня 2018

Вы должны поместить свои контроллеры в:

src / Controller

и использовать:

namespace App\Controller;
...