2014-05-09 10 views
5

मैं अपने नवीनतम प्रोजेक्ट के लिए सिलेक्स का उपयोग कर रहा हूं और मैं सिम्फनी कूकबुक में "How to Dynamically Modify Forms Using Form Events" के साथ-साथ अनुसरण करने का प्रयास कर रहा था। मुझे उस भाग में मिला जो इकाई फ़ील्ड प्रकार का उपयोग करता है और महसूस किया कि यह सिलेक्स में उपलब्ध नहीं है।मैं इकाई फ़ील्ड प्रकार को सिलेक्स में कैसे उपलब्ध कर सकता हूं?

ऐसा लगता है कि सिम्फनी/सिद्धांत-पुल को मेरे संगीतकार.जेसन में जोड़ा जा सकता है जिसमें "EntityType" शामिल है। क्या किसी ने सफलतापूर्वक सिलेक्स में काम करने के लिए इकाई प्रकार प्राप्त किया है या इस मुद्दे में भाग लिया है और एक कामकाज पाया है?

मैं सोच रहा था कुछ इस तरह काम कर सकते हैं:

$builder 
     ->add('myentity', new EntityType($objectManager, $queryBuilder, 'Path\To\Entity'), array(
    )) 
    ; 

मैं भी this answer जो है जैसे कि यह form.factory बढ़ा कर चाल कर सकता है, लेकिन अभी तक कोशिश नहीं की है लग रहा है मिल गया।

+0

क्या आप इसे 'सिलेक्स 2.0 ~' पर काम करते हैं? – Trix

उत्तर

6

मैं this सिलेक्स में एंटीटीटाइप फ़ील्ड जोड़ने के लिए उपयोग करता हूं।

लेकिन चाल DoctrineOrmExtension फॉर्म एक्सटेंशन form.extensionsFormServiceProvider डॉक का विस्तार करके पंजीकृत है।

DoctrineOrmExtension उम्मीद इसके निर्माता में एक ManagerRegistry इंटरफेस, कि अनुवर्ती के रूप में Doctrine\Common\Persistence\AbstractManagerRegistry विस्तार लागू किया जा सकता:

<?php 
namespace MyNamespace\Form\Extensions\Doctrine\Bridge; 

use Doctrine\Common\Persistence\AbstractManagerRegistry; 
use Silex\Application; 

/** 
* References Doctrine connections and entity/document managers. 
* 
* @author Саша Стаменковић <[email protected]> 
*/ 
class ManagerRegistry extends AbstractManagerRegistry 
{ 

    /** 
    * @var Application 
    */ 
    protected $container; 

    protected function getService($name) 
    { 
     return $this->container[$name]; 

    } 

    protected function resetService($name) 
    { 
     unset($this->container[$name]); 

    } 

    public function getAliasNamespace($alias) 
    { 
     throw new \BadMethodCallException('Namespace aliases not supported.'); 

    } 

    public function setContainer(Application $container) 
    { 
     $this->container = $container['orm.ems']; 

    } 

} 

तो, प्रपत्र विस्तार रजिस्टर करने के लिए मैं का उपयोग करें:

+0

इसके लिए बहुत बहुत धन्यवाद! – Jimbo

+1

मुझे अपने composer.json में "symfony/निर्भरता-इंजेक्शन": "~ 2.3" जोड़ना पड़ा। बहुत अच्छा काम किया, धन्यवाद! – ooXei1sh

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

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