5

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

这是我的代码:

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

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

应用程序/配置/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);

编辑:

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

4

1 回答 1

5

尝试查看您的 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
于 2014-07-02T03:53:29.590 回答