2014-07-02 13 views
5

Próbuję zaimplementować usługę kodowania hasła, ale wygląda na to, że nie działa, ponieważ otrzymuję komunikat "Zażądałeś nieistniejącej usługi user_service".Użytkownik zażądał nieistniejącej usługi "user_service"

Oto mój kod:

Vendor/BundleNameBundle/Resources/config/services.yml

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

app/config/config.yml kod

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

dla mojej służby

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); 
    } 

} 

Insi de kontroler kopalni:

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

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

EDIT:

ręcznie usunięte folderu cache i moja służba zaczęła działać.

Odpowiedz

4

Spróbuj patrząc na swoje src/{nazwa_producenta}/{BundleName} Bundle/wstrzykiwanie zależności/{nazwa_producenta} {BundleName} Extension.php

Plik ten powinien załadować definicji usług tak:

<?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'); 
    } 
} 

Spowoduje to załadowanie do kontenera definicji usługi z src/{VendorName}/{BundleName}Bundle/Resources/config/services.yml. Jeśli to nadal nie działa, spróbuj wykonać php app/console cache:clear. Ze względów szybkościowych, symfony zasadniczo będzie agregował całą twoją usługę (i inne pliki konfiguracyjne) w buforowany plik, aby nie musiał czytać tych plików za każdym razem. Pliki, które faktycznie cache definicji usług znajdują się:

  • app/cache/{envName}/(katalogu pamięci podręcznej może być skonfigurowany tak, aby znajdować się tam, gdzie chcesz, to tylko ustawienie domyślne).

pliki, które wymienionych w odpowiednich informacji dla definicji usług pojemnik to:

  • app} {EnvName DebugProjectContainer.php
  • app} {EnvName DebugProjectContainer.php.meta
  • aplikacja {EnvName } DebugProjectContainer.xml
+0

Dostałem go bro Musiałem ręcznie usunąć folder pamięci podręcznej. Teraz wszystko działa poprawnie. – harisK92