2017-06-25 1 views
4

J'avais 2 services de travail sur mon projet symfony 3.2 (8?) Et j'ai dû faire jusqu'à 3.3 (actuellement 3.3.2). Un de mes services fonctionne très bien, et le second me donne l'erreur:
services.ymlErreur de service inexistante depuis symfony 3.3

parameters: 
    #parameter_name: value 

services: 
    _defaults: 
     autowire: true 
     autoconfigure: true 
     public: false 
    AppBundle\: 
     resource: '../../src/AppBundle/*' 
     exclude: '../../src/AppBundle/{Entity,Repository}' 
    list_brands: 
      class: AppBundle\Service\ListBrands 
      arguments: [ '@doctrine.orm.entity_manager' ] 
      calls: 
      - method: getBrands 
    picture_upload: 
      class: AppBundle\Service\UploadPicture 
      arguments: ['@kernel'] 

src \ AppBundle \ Service \ UploadPicture.php

<?php 

namespace AppBundle\Service; 

use DateTime; 
use Symfony\Component\HttpFoundation\File\UploadedFile; 
use Symfony\Component\HttpKernel\Kernel; 

class UploadPicture 
{ 
    protected $kernel; 

    public function __construct(Kernel $kernel) 
    { 
     $this->kernel = $kernel; 
    } 

    public function uploadPicture($object, string $oldPic, string $path) 
    { 
     /** @var UploadedFile $image */ 
     $image = $object->getImage(); 

     $time = new DateTime('now'); 

     if ($image) { 
      $imgPath = '/../web/' . $path; 

      $filename = $time->format('d-m-Y-s') . md5($time->format('s')) . uniqid(); 

      $image->move($this->kernel->getRootDir() . $imgPath,$filename . '.png'); 

      $object->setImage($path . $filename . '.png'); 
     } else { 
      $object->setImage($oldPic); 
     } 
    } 
} 

Erreur:Vous avez demandé un service inexistant "picture_upload".
appel comme ceci:$uploadService = $this->get('picture_upload');

+0

Veuillez nous montrer la sortie de la commande 'php bin/console debug: container'. –

Répondre

4

Vous ne l'avez pas écrit comment vous injectez/appelez votre service, mais l'appel $this->get() sonne comme un appel à partir d'un contrôleur. Je suppose que cela est lié à la nouvelle modification dans Symfony et votre configuration de service par défaut de l'attribut public.

S'il vous plaît vérifier les lignes suivantes dans votre configuration de commentaires:

# services.yml 
services: 
    _defaults: 
     autowire: true 
     autoconfigure: true 
     public: false # here you are setting all service per default to be private 
    AppBundle\: 
     resource: '../../src/AppBundle/*' 
     exclude: '../../src/AppBundle/{Entity,Repository}' 
    list_brands: 
      class: AppBundle\Service\ListBrands 
      arguments: [ '@doctrine.orm.entity_manager' ] 
      calls: 
      - method: getBrands 
    picture_upload: 
      class: AppBundle\Service\UploadPicture 
      arguments: ['@kernel'] 
      public: true # you need to explicitly set the service to public 

Vous devez marquer le service comme public, soit par défaut (non recommandé) ou explicitement dans la définition du service.