2014-05-09 31 views
5

Son projem için Silex'i kullanıyorum ve Symfony yemek kitabındaki "How to Dynamically Modify Forms Using Form Events" ile birlikte takip etmeye çalışıyordum. Varlık alan tipini kullanan ve Silex'te mevcut olmadığını fark ettim.Durum alanı türünü silex'te nasıl edinebilirim?

Symfony/doctrine-bridge, "EntityType" ı içeren composer.json'a eklenebilir gibi görünüyor. Herkes, Silex'te çalışmak için varlık türünü başarıyla aldı mı veya bu soruna katılıp bir çözüm buldu

Böyle bir şey işe yarayabilecek düşünüyordum:

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

Ben de form.factory uzatarak hile yapabilir ancak henüz teşebbüs değil gibi görünüyor this answer bulundu.

+0

DoctrineOrmExtension yapıcısına bir ManagerRegistry arayüzü, o aşağıdaki gibi Doctrine\Common\Persistence\AbstractManagerRegistry uzanan uygulanabilir beklediğini Silex 2.0 ~ 'üzerinde çalıştınız mı? – Trix

cevap

6

Silex'te EntityType alanı eklemek için this Gist kullanıyorum.

Ancak, hile DoctrineOrmExtension form uzantısını belgesi gibi FormServiceProvider doc uzantısını genişleterek kaydeder.

<?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']; 

    } 

} 

Yani, form uzantısı kaydetmek i kullanın::

+0

Bunun için çok teşekkürler! – Jimbo

+1

"Symfony/dependency-injection" 'i ekledim: besteci.json'a "~ 2.3". Çok çalıştı, teşekkürler! – ooXei1sh