【问题标题】:You have requested a non-existent service "user_service"您请求了一个不存在的服务“user_service”
【发布时间】:2014-07-02 13:41:39
【问题描述】:

我正在尝试实现密码编码服务,但它似乎不起作用,因为我收到“您已请求不存在的服务 user_service ”错误。

这是我的代码:

供应商/BundleNameBundle/Resources/config/services.yml

services:
    user_service:
         class:  Morescreens\VideomanagerBundle\Service\UserService
         arguments: ['@security.encoder_factory']

app/config/config.yml

imports:
    - { resource: "@morescreensVideomanagerBundle/Resources/config/services.yml" }

我的服务代码

class UserService {

    /**
     * @var EncoderFactoryInterface
     */
    private $encoderFactory;



    public function  __construct(EncoderFactoryInterface $encoderFactory)
    {
           $this->encoderFactory=$encoderFactory;
    }


    public  function  setEncodedPassword(User $user)
   {
         $encoder=$this->encoderFactory->getEncoder($user);
         $password=$encoder->encodePassword($user->getPassword(),$user->getSalt());
         $user->setPassword($password);
   }

}

矿井控制器内部:

 $user=new User();
        $user->setPassword('password');

        $this->get('user_service')->setEncodedPassword($user);

编辑:

我手动删除了缓存文件夹,我的服务开始工作了。

【问题讨论】:

    标签: php symfony symfony-2.5


    【解决方案1】:

    尝试查看您的 src/{VendorName}/{BundleName}Bundle/DependencyInjection/{VendorName}{BundleName}Extension.php

    这个文件应该像这样加载你的服务定义:

    <?php
    
    namespace Vendor\{BundleName}Bundle\DependencyInjection;
    
    use Symfony\Component\DependencyInjection\ContainerBuilder;
    use Symfony\Component\Config\FileLocator;
    use Symfony\Component\HttpKernel\DependencyInjection\Extension;
    use Symfony\Component\DependencyInjection\Loader;
    
    /**
     * This is the class that loads and manages your bundle configuration
     *
     * To learn more see {@link http://symfony.com/doc/current/cookbook/bundles/extension.html}
     */
    class Vendor{BundleName}Extension extends Extension
    {
        /**
         * {@inheritDoc}
         */
        public function load(array $configs, ContainerBuilder $container)
        {
            $configuration = new Configuration();
            $config = $this->processConfiguration($configuration, $configs);
    
            //Load our YAML resources
            $loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
            $loader->load('services.yml');
        }
    }
    

    这会将服务定义从src/{VendorName}/{BundleName}Bundle/Resources/config/services.yml 加载到容器中。如果这仍然不起作用,请尝试执行php app/console cache:clear。出于速度原因,symfony 基本上会将所有服务(和其他配置文件)聚合到一个缓存文件中,因此它不必每次都读取这些文件。实际缓存服务定义的文件位于:

    • app/cache/{envName}/(可以将缓存目录配置为您想要的任何位置,这只是默认设置)。

    具有容器服务定义相关信息的文件有:

    • app{EnvName}DebugProjectContainer.php
    • app{EnvName}DebugProjectContainer.php.meta
    • app{EnvName}DebugProjectContainer.xml

    【讨论】:

    • 知道了,我需要手动删除缓存文件夹。现在一切正常。
    猜你喜欢
    • 2013-02-03
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2016-12-29
    • 1970-01-01
    相关资源
    最近更新 更多