php Symfony 4.1:您请求了一个不存在的服务“教义”

6tqwzwtp  于 2023-04-19  发布在  PHP
关注(0)|答案(2)|浏览(101)

大家好,我在symfony4.1上做了一个新项目
我使用postgres 10.5作为我的SGBD。
我用symfony的maker bundle创建了一个实体,现在我试着用那个命令仍然用maker bundle进行迁移:
php bin/console make:migration
下面是堆栈跟踪:

In Container.php line 274:

  You have requested a non-existent service "doctrine". Did you mean one of these: "console.command.public_alias.doctrine_cache.contains_command", "console.command.public
  _alias.doctrine_cache.delete_command", "console.command.public_alias.doctrine_cache.flush_command", "console.command.public_alias.doctrine_cache.stats_command", "consol
  e.command.public_alias.doctrine_migrations.diff_command", "console.command.public_alias.doctrine_migrations.execute_command", "console.command.public_alias.doctrine_mig
  rations.generate_command", "console.command.public_alias.doctrine_migrations.latest_command", "console.command.public_alias.doctrine_migrations.migrate_command", "conso
  le.command.public_alias.doctrine_migrations.status_command", "console.command.public_alias.doctrine_migrations.version_command"?

Exception trace:
 Symfony\Component\DependencyInjection\Container->make() at /opt/www/jame/dataneo-erp/vendor/symfony/dependency-injection/Container.php:222
 Symfony\Component\DependencyInjection\Container->get() at /opt/www/jame/dataneo-erp/vendor/doctrine/doctrine-migrations-bundle/Command/Helper/DoctrineCommandHelper.php:21
 Doctrine\Bundle\MigrationsBundle\Command\Helper\DoctrineCommandHelper::setApplicationHelper() at /opt/www/jame/dataneo-erp/vendor/doctrine/doctrine-migrations-bundle/Command/MigrationsDiffDoctrineCommand.php:34
 Doctrine\Bundle\MigrationsBundle\Command\MigrationsDiffDoctrineCommand->execute() at /opt/www/jame/dataneo-erp/vendor/symfony/console/Command/Command.php:251
 Symfony\Component\Console\Command\Command->run() at /opt/www/jame/dataneo-erp/vendor/symfony/maker-bundle/src/Maker/MakeMigration.php:78
 Symfony\Bundle\MakerBundle\Maker\MakeMigration->generate() at /opt/www/jame/dataneo-erp/vendor/symfony/maker-bundle/src/Command/MakerCommand.php:100
 Symfony\Bundle\MakerBundle\Command\MakerCommand->execute() at /opt/www/jame/dataneo-erp/vendor/symfony/console/Command/Command.php:251
 Symfony\Component\Console\Command\Command->run() at /opt/www/jame/dataneo-erp/vendor/symfony/console/Application.php:904
 Symfony\Component\Console\Application->doRunCommand() at /opt/www/jame/dataneo-erp/vendor/symfony/framework-bundle/Console/Application.php:89
 Symfony\Bundle\FrameworkBundle\Console\Application->doRunCommand() at /opt/www/jame/dataneo-erp/vendor/symfony/console/Application.php:262
 Symfony\Component\Console\Application->doRun() at /opt/www/jame/dataneo-erp/vendor/symfony/framework-bundle/Console/Application.php:75
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /opt/www/jame/dataneo-erp/vendor/symfony/console/Application.php:145
 Symfony\Component\Console\Application->run() at /opt/www/jame/dataneo-erp/bin/console:39

下面是一些配置文件的代码:
services.yaml

# This file is the entry point to configure your own services.
# Files in the packages/ subdirectory configure your dependencies.

# 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:
    locale: 'fr'

services:
        autowire: true
        autoconfigure: true
        public: false

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

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

config/packages/doctrin.yaml

parameters:
    env(DATABASE_URL): ''

    doctrine:
        dbal:
            driver: 'pdo_pgsql'
            server_version: '10.5'
            charset: utf8mb4
            default_table_options:
                charset: utf8mb4
                collate: utf8mb4_unicode_ci

            url: '%env(resolve:DATABASE_URL)%'
        orm:
            auto_generate_proxy_classes: '%kernel.debug%'
            naming_strategy: doctrine.orm.naming_strategy.underscore
            auto_mapping: true
            mappings:
                App:
                    is_bundle: false
                    type: annotation
                    dir: '%kernel.project_dir%/src/Entity'
                    prefix: 'App\Entity'
                    alias: App

我的.env

APP_ENV=dev
APP_SECRET=secret
DATABASE_URL="pgsql://erp_dev:My_PASSWORD@127.0.0.1:5432/erp"
MAILER_URL=null://localhost

编辑:
我试着把“服务:public:true”,结果是一个新的错误:

In DefinitionErrorExceptionPass.php line 54:

  [Symfony\Component\DependencyInjection\Exception\RuntimeException]
  Cannot autowire service "App\Repository\SocieteRepository": argument "$registry" of method "__construct()" refer
  ences interface "Symfony\Bridge\Doctrine\RegistryInterface" but no such service exists. Did you create a class t
  hat implements this interface?

Exception trace:
 Symfony\Component\DependencyInjection\Compiler\DefinitionErrorExceptionPass->processValue() at /opt/www/jame/dataneo-erp/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php:60
 Symfony\Component\DependencyInjection\Compiler\AbstractRecursivePass->processValue() at /opt/www/jame/dataneo-erp/vendor/symfony/dependency-injection/Compiler/DefinitionErrorExceptionPass.php:32
 Symfony\Component\DependencyInjection\Compiler\DefinitionErrorExceptionPass->processValue() at /opt/www/jame/dataneo-erp/vendor/symfony/dependency-injection/Compiler/AbstractRecursivePass.php:39
 Symfony\Component\DependencyInjection\Compiler\AbstractRecursivePass->process() at /opt/www/jame/dataneo-erp/vendor/symfony/dependency-injection/Compiler/Compiler.php:95
 Symfony\Component\DependencyInjection\Compiler\Compiler->compile() at /opt/www/jame/dataneo-erp/vendor/symfony/dependency-injection/ContainerBuilder.php:736
 Symfony\Component\DependencyInjection\ContainerBuilder->compile() at /opt/www/jame/dataneo-erp/vendor/symfony/http-kernel/Kernel.php:519
 Symfony\Component\HttpKernel\Kernel->initializeContainer() at /opt/www/jame/dataneo-erp/vendor/symfony/http-kernel/Kernel.php:123
 Symfony\Component\HttpKernel\Kernel->boot() at /opt/www/jame/dataneo-erp/vendor/symfony/framework-bundle/Console/Application.php:65
 Symfony\Bundle\FrameworkBundle\Console\Application->doRun() at /opt/www/jame/dataneo-erp/vendor/symfony/console/Application.php:145
 Symfony\Component\Console\Application->run() at /opt/www/jame/dataneo-erp/bin/console:39

下面是命令的结果
php bin/console debug:container|grep原则

console.command.public_alias.doctrine_cache.contains_command                         alias for "doctrine_cache.contains_command"                                           
  console.command.public_alias.doctrine_cache.delete_command                           alias for "doctrine_cache.delete_command"                                             
  console.command.public_alias.doctrine_cache.flush_command                            alias for "doctrine_cache.flush_command"                                              
  console.command.public_alias.doctrine_cache.stats_command                            alias for "doctrine_cache.stats_command"                                              
  console.command.public_alias.doctrine_migrations.diff_command                        alias for "doctrine_migrations.diff_command"                                          
  console.command.public_alias.doctrine_migrations.execute_command                     alias for "doctrine_migrations.execute_command"                                       
  console.command.public_alias.doctrine_migrations.generate_command                    alias for "doctrine_migrations.generate_command"                                      
  console.command.public_alias.doctrine_migrations.latest_command                      alias for "doctrine_migrations.latest_command"                                        
  console.command.public_alias.doctrine_migrations.migrate_command                     alias for "doctrine_migrations.migrate_command"                                       
  console.command.public_alias.doctrine_migrations.status_command                      alias for "doctrine_migrations.status_command"                                        
  console.command.public_alias.doctrine_migrations.version_command                     alias for "doctrine_migrations.version_command"                                       
  doctrine_cache.abstract.apc                                                          Doctrine\Common\Cache\ApcCache                                                        
  doctrine_cache.abstract.apcu                                                         Doctrine\Common\Cache\ApcuCache                                                       
  doctrine_cache.abstract.array                                                        Doctrine\Common\Cache\ArrayCache                                                      
  doctrine_cache.abstract.chain                                                        Doctrine\Common\Cache\ChainCache                                                      
  doctrine_cache.abstract.couchbase                                                    Doctrine\Common\Cache\CouchbaseCache                                                  
  doctrine_cache.abstract.file_system                                                  Doctrine\Common\Cache\FilesystemCache                                                 
  doctrine_cache.abstract.memcache                                                     Doctrine\Common\Cache\MemcacheCache                                                   
  doctrine_cache.abstract.memcached                                                    Doctrine\Common\Cache\MemcachedCache                                                  
  doctrine_cache.abstract.mongodb                                                      Doctrine\Common\Cache\MongoDBCache                                                    
  doctrine_cache.abstract.php_file                                                     Doctrine\Common\Cache\PhpFileCache                                                    
  doctrine_cache.abstract.predis                                                       Doctrine\Common\Cache\PredisCache                                                     
  doctrine_cache.abstract.redis                                                        Doctrine\Common\Cache\RedisCache                                                      
  doctrine_cache.abstract.riak                                                         Doctrine\Common\Cache\RiakCache                                                       
  doctrine_cache.abstract.sqlite3                                                      Doctrine\Common\Cache\SQLite3Cache                                                    
  doctrine_cache.abstract.void                                                         Doctrine\Common\Cache\VoidCache                                                       
  doctrine_cache.abstract.wincache                                                     Doctrine\Common\Cache\WinCacheCache                                                   
  doctrine_cache.abstract.xcache                                                       Doctrine\Common\Cache\XcacheCache                                                     
  doctrine_cache.abstract.zenddata                                                     Doctrine\Common\Cache\ZendDataCache                                                   
  doctrine_cache.contains_command                                                      Doctrine\Bundle\DoctrineCacheBundle\Command\ContainsCommand                           
  doctrine_cache.delete_command                                                        Doctrine\Bundle\DoctrineCacheBundle\Command\DeleteCommand                             
  doctrine_cache.flush_command                                                         Doctrine\Bundle\DoctrineCacheBundle\Command\FlushCommand                              
  doctrine_cache.stats_command                                                         Doctrine\Bundle\DoctrineCacheBundle\Command\StatsCommand                              
  doctrine_migrations.diff_command                                                     Doctrine\Bundle\MigrationsBundle\Command\MigrationsDiffDoctrineCommand                
  doctrine_migrations.execute_command                                                  Doctrine\Bundle\MigrationsBundle\Command\MigrationsExecuteDoctrineCommand             
  doctrine_migrations.generate_command                                                 Doctrine\Bundle\MigrationsBundle\Command\MigrationsGenerateDoctrineCommand            
  doctrine_migrations.latest_command                                                   Doctrine\Bundle\MigrationsBundle\Command\MigrationsLatestDoctrineCommand              
  doctrine_migrations.migrate_command                                                  Doctrine\Bundle\MigrationsBundle\Command\MigrationsMigrateDoctrineCommand             
  doctrine_migrations.status_command                                                   Doctrine\Bundle\MigrationsBundle\Command\MigrationsStatusDoctrineCommand              
  doctrine_migrations.version_command                                                  Doctrine\Bundle\MigrationsBundle\Command\MigrationsVersionDoctrineCommand             
  maker.doctrine_helper                                                                Symfony\Bundle\MakerBundle\Doctrine\DoctrineHelper                                    
  sensio_framework_extra.converter.doctrine.orm                                        Sensio\Bundle\FrameworkExtraBundle\Request\ParamConverter\DoctrineParamConverter      
  sensio_framework_extra.converter.doctrine.orm.expression_language                    alias for "sensio_framework_extra.converter.doctrine.orm.expression_language.default" 
  sensio_framework_extra.converter.doctrine.orm.expression_language.default            Symfony\Component\ExpressionLanguage\ExpressionLanguage

非常感谢。

csga3l58

csga3l581#

在services.yml中更改以下行

services:
    public: false

通过

services:
    public: true
20jt8wwn

20jt8wwn2#

当我尝试为我的自定义symfony包添加单元测试时,我遇到了同样的错误。在/tests/App/AppKernel. php中,我加载了DoctrineBundle

<?php

namespace App\Tests\App;

use Doctrine\Bundle\DoctrineBundle\DoctrineBundle;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\Loader\LoaderInterface;
use Symfony\Component\HttpKernel\Kernel;
use Symfony\Bundle\FrameworkBundle\FrameworkBundle;
use Symfony\Bundle\FrameworkBundle\Kernel\MicroKernelTrait;

class AppKernel extends Kernel
{
    use MicroKernelTrait;
    public function __construct()
    {

        parent::__construct('test', true);
    }

    public function registerBundles(): iterable
    {
        return array(
            new FrameworkBundle(),
            new DoctrineBundle(),
        );
    }

    protected function configureContainer(ContainerBuilder $containerBuilder, LoaderInterface $loader): void
    {
        $loader->load(__DIR__.'/config/config.yml');

        $loader->load(__DIR__.'/config/services.yml');
    }
}

我不需要DB连接,所以我没有添加原则配置,但因为原则配置丢失,我得到了这个错误。解决方案是为测试/tests/App/config/doctrine.yml添加原则配置:

doctrine:
  dbal:
    url: '%env(resolve:DATABASE_URL)%'
  orm:
    auto_generate_proxy_classes: true
    naming_strategy: doctrine.orm.naming_strategy.underscore_number_aware
    auto_mapping: true
    mappings:
      App:
        is_bundle: false
        dir: '%kernel.project_dir%/Entity'
        prefix: 'MainBundle\Entity'
        alias: App

并将其加载到/tests/App/AppKernel.php中:

protected function configureContainer(ContainerBuilder $containerBuilder, LoaderInterface $loader): void
    {
        $loader->load(__DIR__.'/config/config.yml');
        $loader->load(__DIR__.'/config/services.yml');

        $loader->load(__DIR__.'/config/doctrine.yml');
    }

注意:您需要配置phpunit.xml.dist来使用这个AppKernel文件。
我的测试需要EntityManager,为此我不得不添加doctrine.dbaldoctrine.orm,但只要解决这个错误,doctrine.dbal配置就足够了。

相关问题