Ошибка: «Ожидаемый класс автозагрузчика ... ошибка опечатки», но нет опечатки в наследовании класса Symfony 4 - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть файл класса "Ajuste.php":

<? // src/App/Entity/Ajuste.php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;
use App\SuperClass\Documento as Documento;
use Doctrine\Common\Collections\ArrayCollection;

/** @ORM\Entity */
class Ajuste extends Documento
{
    /** 
     * @Id 
     * @Column(type="integer") 
     * @ORM\GeneratedValue(strategy="AUTO")
     * */
    private $id;

    /** @ORM\Column(type="string") */
    private $name;

...more fields and methods
}

Суперкласс "Documento.php" находится в другой папке:

<? // src/SuperClass/Documento.php

namespace App\SuperClass;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\MappedSuperclass 
 * */
class Documento
{
    /** @ORM\Column(type="DateTime") */
    protected $fecha_emision;

    /** @ORM\Column(type="DateTime") */
    protected $fecha_registro;

    ...more fields and methods
}

services.yaml is:

[...]
services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true      # Automatically injects dependencies in your                         services.
        autoconfigure: true # Automatically registers your services as     commands, event subscribers, etc.

    # makes classes in src/ available to be used as services
    # this creates a service per class whose id is the fully-qualified class name
    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Admin,Resources,SuperClass}'

    # controllers are imported separately to make sure services can be injected
    # as action arguments even if you don't extend any base controller class
    App\Controller\:
        resource: '../src/Controller'
        tags: ['controller.service_arguments']
[...]

Проблема начинается, когда я пытаюсь php bin/console make:migration или php bin/console doctrine:schema:validate.Ошибка:

In DebugClassLoader.php line 204:

The autoloader expected class "App\SuperClass\Documento" to be defined in file "[more dirs]../src/SuperClass/Documento.php". The file was found but the class was not in it, the class name or namespace probably has a typo.`

Дело в том, что я не могу заставить его работать, ошибка продолжает появляться, даже если я удаляю каталог «SuperClass» из списка исключений в службах (в этом случае ошибкавсе еще там и также указывает на опечатку в services.yaml), но я думаю, что это должно быть что-то с изменениями в Symfony 4, и, кажется, я не могу понять это.Заранее спасибо.

Редактировать : Скриншот структуры каталогов, на всякий случай.(https://imgur.com/a/PNnn3mR)

Редактировать : добавлен раздел автозагрузки Composer:

"autoload": {
    "psr-4": {
        "App\\": "src/"
    }
},
"autoload-dev": {
    "psr-4": {
        "App\\Tests\\": "tests/"
    }
},

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Я удалил оба класса, затем сделал их снова, используя команду php bin/console make:entity, но без ошибок.Кажется, в аннотациях ORM произошла какая-то ошибка.

Оттуда я запустил команду php bin/console make:migration и php bin/console doctrine:migrations:migrate, но сгенерированный файл миграции внутри src / Migrations имеет другое пространство имен, чем «App», поэтому яПришлось добавить папку «Миграции» в исключения в services.yaml, чтобы она отражала это изменение и пропускала папку при поиске классов:

App\:
    resource: '../src/*'
    exclude: '../src/{Entity,Admin,Resources,SuperClass,Migrations}'

И затем никаких ошибок ☺

Я простохотел указать на это, если кто-то решит эту проблему.

0 голосов
/ 01 февраля 2019

Без оператора use автозагрузчик PHP ищет в этом каталоге этот класс Documento для его загрузки.

Добавление use App\SuperClass\Documento в src/App/Entity/Ajuste.php должно решить вашу проблему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...