当前位置: 首页 > 知识库问答 >
问题:

Symfony 4-自动加载程序需要在文件中定义类[…]

巫马松
2023-03-14

我正在尝试添加一个在Symfony 3上构建的旧包。*到Symfony 4,但我得到了以下错误:

自动加载器预期类“App\SBC\TiersBundle\Controller\ChantierController”将在文件“/Applications/MAMP/htdocs/Projects/HelloSymfony4/vendor/composer/../../src/SBC/TiersBundle/Controller/ChantierController.php”中定义。已找到该文件,但该类不在其中,类名称或命名空间可能在/Applications/MAMP/htdocs/Projects/HelloSymfony4/config/services中有输入错误。yaml(加载在resource/Applications/MAMP/htdocs/Projects/HelloSymfony4/config/services.yaml中)。

框架似乎没有识别捆绑包的名称空间,所以我在config/bundle中执行了以下步骤:
。php
我添加了第三行:

return [
    Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true],
    Symfony\Bundle\TwigBundle\TwigBundle::class => ['all' => true],
    \SBC\TiersBundle\TiersBundle::class => ['all' => true], // this one
    Symfony\Bundle\WebProfilerBundle\WebProfilerBundle::class => ['dev' => true, 'test' => true],
];

composer.json中,我添加了autoload部分的第一行:

"autoload": {
        "psr-4": {
            "SBC\\": "src/SBC/",
            "App\\": "src/"

        }
    },

因为我的Bundle的名称空间以SBC\开头,我在控制台中启动了composer dump autoload

<?php

namespace SBC\TiersBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class TiersBundle extends Bundle
{
}

Chantier控制器。php:

namespace SBC\TiersBundle\Controller;

use SBC\TiersBundle\Entity\Chantier;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;


class ChantierController extends Controller
{
...
}

不幸的是,仍然面临同样的错误,我如何修复它,并提前表示感谢。

更新:config/services。yaml

# Put parameters here that don't need to change on each machine where the app is deployed
# https://symfony.com/doc/current/best_practices/configuration.html#application-related-configuration
parameters:

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.
        public: false       # Allows optimizing the container by removing unused services; this also means
                            # fetching services directly from the container via $container->get() won't work.
                            # The best practice is to be explicit about your dependencies anyway.

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

    SBC\TiersBundle\Controller\:
        resource: '../src/SBC/TiersBundle/Controller'
        tags: ['controller.service_arguments']

    App\:
        resource: '../src/*'
        exclude: '../src/{Entity,Migrations,Tests}'

    # 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']

    # add more service definitions when explicit configuration is needed
    # please note that last definitions always *replace* previous ones

共有1个答案

刁瀚昂
2023-03-14

这个问题很可能是由Symfony配置和名称空间冲突引起的。首先你需要调整你的config/services.yaml

SBC\:
    resource: '../src/SBC/*'
    exclude: '../src/SBC/TiersBundle/{Entity,Migrations,Tests,Kernel.php}'

SBC\TiersBundle\Controller\:
    resource: '../src/SBC/TiersBundle/Controller'
    tags: ['controller.service_arguments']

App\:
    resource: '../src/*'
    exclude: '../src/{SBC,Entity,Migrations,Tests,Kernel.php}'

这样,您将为您的命名空间定义默认值,并在生成自动加载类时防止默认命名空间App包含您的目录。请注意,如果您使用的是注释路由,您还需要调整config/annotations.yaml

sbc_controllers:
    resource: ../../src/SBC/TiersBundle/Controller/
    type: annotation

这样就可以正确地生成路由。执行这些步骤后,再次运行composer dump autoload,并清除Symfony的缓存

如果将来遇到其他问题,这可能会有所帮助:https://github.com/symfony/symfony/blob/master/UPGRADE-4.0.md

 类似资料:
  • 我已经检查了类似的问题,但其他人发布了,但我仍然看不出我的代码中有什么错误。 我只是复制了它从留档-https://symfony.com/doc/3.4/page_creation.html 自动加载器需要在文件“E:\projektai\php projektai\htdocs\mokomieji\weather\u demo\u 3\vendor\composer/./../src\Cont

  • 我想从GitHub的私有存储库下载,所以我需要传递头和。 例如,使用curl:

  • 我在jsp文件“无法加载pkg.Handler类”中遇到了错误。我不明白问题出在哪里,一切似乎都很好。 下面是我的标签库描述符(tLD)文件 Handler.java文件 下面是jsp文件 以下是项目结构 项目结构截图

  • 本文向大家介绍Android自定义加载控件实现数据加载动画,包括了Android自定义加载控件实现数据加载动画的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Android自定义加载控件,第一次小人跑动的加载效果眼前一亮,相比传统的PrograssBar高大上不止一点,于是走起,自定义了控件LoadingView去实现动态效果,可直接在xml中使用,具体实现如下 2. xml布局文件

  • Laravel版本5.6 我正试图通过“自动加载”下的文件将一些类添加到我的项目中。 Composer.json 每当我执行时,两个文件都会出现错误,表示找不到文件。 PHP警告:未捕获错误异常:require(C:\laravel projects\project\vendor\composer/./../app/helpers/dbUsers.PHP):无法打开流:C:\laravel pro

  • 可以用Java定义自定义自动装箱吗? 在键入函数的参数时,我需要自动将转换为我的类。对于两个参数,我最终编写了四个非常相似的方法: 所以我可以输入: 然而,我认为这对于10个参数(我想做的)变得难以管理;我想我需要写1024个类似的方法。 我正在考虑的另一个解决方案是编写一个方法,例如: 但是我可以键入数字和混合在一起作为参数吗?