【问题标题】:loading resource security.yml symfony3加载资源 security.yml symfony3
【发布时间】:2017-05-04 10:33:30
【问题描述】:

我尝试在应用程序中使用我自己的包中的 security.yml 扩展我的文件 security.yml,但出现此错误:

InvalidArgumentException in YamlFileLoader.php line 431:
There is no extension able to load the configuration for "security"(in
C:\wamp64\www\Project\src\Admin\UserBundle\DependencyInjection/../Resources/
config\security.yml). Looked for namespace "security", found none

我查看了 Symfony 文档,但没有发现问题。我给你看我的代码

app/Resources/config/security.yml

security:
    encoders:
        Symfony\Component\Security\Core\User\User: plaintext
    access_control:
        - { path: ^/admin, roles: ROLE_ADMIN }
    providers:
        in_memory:
            memory: ~
    firewalls:
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

Admin/UserBundle/Resources/config/security.yml

security:
    encoders:
        Admin\UserBundle\Entity\User: sha512
    role_hierarchy:
        ROLE_COLLABORATEUR:       [ROLE_LECTEUR]
        ROLE_CHEF:       [ROLE_COLLABORATEUR]
        ROLE_ADMIN:       [ROLE_CHEF, ROLE_ALLOWED_TO_SWITCH]
        ROLE_SUPER_ADMIN: [ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
    providers:
        main:
            id: fos_user.user_provider.username
        firewalls:
            main_login:
                pattern:   ^/login$
                anonymous: true
            main_register:
                pattern:   ^/register
                anonymous: true
            main_resetting:
                pattern:   ^/resetting
                anonymous: true
            main:
                anonymous: false
                pattern: ^/
                provider:  main
                form_login:
                    login_path: fos_user_security_login
                    check_path: fos_user_security_check
                logout:
                    path:       fos_user_security_logout
                target:     ^/
                remember_me:
                    secret: %secret%

Admin/UserBundle/DependencyInjection/AdminUserExtension.php

class AdminUserExtension extends Extension
{
    /**
    * {@inheritdoc}
    */
    public function load(array $configs, ContainerBuilder $container)
    {
        $configuration = new Configuration();
        $config = $this->processConfiguration($configuration, $configs);

        $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));

        foreach ( array('services', 'parameters', 'security') as $basename )
        {
           $loader->load(sprintf('%s.yml', $basename));
        }
    }
}

SecurityBundle 在这里 :(

应用内核

<?php

use Symfony\Component\HttpKernel\Kernel;
use Symfony\Component\Config\Loader\LoaderInterface;

class AppKernel extends Kernel
{
    public function registerBundles()
    {
        $bundles = [
            new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
            new Symfony\Bundle\SecurityBundle\SecurityBundle(),
            new Symfony\Bundle\TwigBundle\TwigBundle(),
            new Symfony\Bundle\MonologBundle\MonologBundle(),
            new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
            new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
            new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
            new FOS\UserBundle\FOSUserBundle(),
            new Stof\DoctrineExtensionsBundle\StofDoctrineExtensionsBundle(),
            new Symfony\Bundle\AsseticBundle\AsseticBundle(),
        ];

        if (in_array($this->getEnvironment(), ['dev', 'test'], true)) {
            $bundles[] = new Symfony\Bundle\DebugBundle\DebugBundle();
            $bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
            $bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
            $bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
        }

        return $bundles;
    }

    public function getRootDir()
    {
        return __DIR__;
    }

    public function getCacheDir()
    {
        return dirname(__DIR__).'/var/cache/'.$this->getEnvironment();
    }

    public function getLogDir()
    {
        return dirname(__DIR__).'/var/logs';
    }

    public function registerContainerConfiguration(LoaderInterface $loader)
    {
        $loader->load($this->getRootDir().'/config/config_'.$this->getEnvironment().'.yml');
    }
 }

另一个文件似乎可以工作,因为当我在它们之间合并 security.yml 时,应用程序可以工作。

【问题讨论】:

  • 你能给我们看看 AppKernel.php,看起来你没有启用 SecurityBundle
  • 我已经添加了:)。
  • 您找到解决方案了吗?当我想从自定义包中加载一些安全配置时,我遇到了同样的问题。

标签: php symfony security symfony-3.2


【解决方案1】:

您需要将 SecurityBundle 添加到您的 AppKernel。

    public function registerBundles()
{
    $bundles = [
        ...
        new Symfony\Bundle\SecurityBundle\SecurityBundle(),
        ...
    ];

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2017-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多