2016-10-19 9 views
5

मैं अपने सेवा में सत्यापनकर्ता इंजेक्षन करने की कोशिश - लेकिन मैं इसे नहीं पाते:सिम्फनी 3 - एक सेवा में वैधकर्ता को इंजेक्ट कैसे करें?

mybundle.service.supplier: 
    class: AppBundle\Service\SupplierService 
    calls: 
     - [setValidator, ['@validator']] 

@validator है उम्मीद RecursiveValidator http://api.symfony.com/3.1/Symfony/Component/Validator/Validator/RecursiveValidator.html नहीं - @validator एक अंतरफलक है।

तो मैं अपनी सेवा में सत्यापनकर्ता को कैसे इंजेक्ट कर सकता हूं?

यह मैं क्या चाहते है:

<?php 

namespace AppBundle\Service; 


use AppBundle\Entity\Supplier; 
use AppBundle\Helper\EntityManagerTrait; 
use Symfony\Component\HttpFoundation\RequestStack; 
use Symfony\Component\Validator\Validator\RecursiveValidator; 

/** 
* Class SupplierService 
* @package AppBundle\Service 
*/ 
class SupplierService 
{ 
    use EntityManagerTrait; 

    /** @var RecursiveValidator $validator */ 
    protected $validator; 

    /** 
    * @return RecursiveValidator 
    */ 
    public function getValidator() 
    { 
     return $this->validator; 
    } 

    /** 
    * @param RecursiveValidator $validator 
    * @return SupplierService 
    */ 
    public function setValidator($validator) 
    { 
     $this->validator = $validator; 

     return $this; 
    } 


    public function addSupplier($data) 
    { 
     $supplier = new Supplier(); 
     $validator = $this->getValidator(); 
     $errors = $validator->validate($supplier); 

    } 
} 

उत्तर

6

@validator एक अंतरफलक है।

यह समझ में नहीं आता है। यदि यह एक इंटरफ़ेस होगा, तो Validator सेवा का कोई इंस्टालेशन नहीं हो सकता है। हां, यह ValidatorInterface लागू करता है, लेकिन ऐसा नहीं है।

दूसरी तरफ, मुझे यकीन है कि आपको RecursiveValidator का उदाहरण मिलेगा। मेरी विश्लेषण देखें:

  • चेक Symfony के XML में validator परिभाषा:

    <service id="validator" class="Symfony\Component\Validator\Validator\ValidatorInterface"> 
        <factory service="validator.builder" method="getValidator" /> 
    </service> 
    
  • validator.builder कारखाने सेवा की परिभाषा की जाँच करें:

    <service id="validator.builder" class="Symfony\Component\Validator\ValidatorBuilderInterface"> 
        <factory class="Symfony\Component\Validator\Validation" method="createValidatorBuilder" /> 
        <call method="setConstraintValidatorFactory"> 
         <argument type="service" id="validator.validator_factory" /> 
        </call> 
        <call method="setTranslator"> 
         <argument type="service" id="translator" /> 
        </call> 
        <call method="setTranslationDomain"> 
         <argument>%validator.translation_domain%</argument> 
        </call> 
    </service> 
    
  • कारखाने Symfony\Component\Validator\Validation::createValidatorBuilder की जाँच करें। यह ValidatorBuilder

  • का उदाहरण देता है, अंत में, ValidatorBuilder::getValidator() देखें। यह निम्नलिखित के साथ समाप्त होता है:

    return new RecursiveValidator($contextFactory, $metadataFactory, $validatorFactory, $this->initializers); 
    

तो, आप सही उदाहरण (RecursiveValidator) मिल जाएगा।

उम्मीद है कि यह मदद करता है ...

+0

धन्यवाद ... इससे मेरी मदद की :) – goldlife

संबंधित मुद्दे