2014-05-09 19 views
5

Używam Silex do mojego najnowszego projektu i starałem się podążać za wersją "How to Dynamically Modify Forms Using Form Events" w książce kucharskiej Symfony. Dostałem się do części, która używa typu pola entity i uświadomił sobie, że nie jest dostępny w Silex.Jak mogę udostępnić typ pola jednostki w silex?

Wygląda na to, że symfony/mostek doktrynalny można dodać do mojego composer.json, który zawiera "EntityType". Czy ktoś z powodzeniem otrzymał typ jednostki do pracy w Silex lub napotkał ten problem i znalazł obejście?

myślałem coś takiego może działać:

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

Znalazłem również this answer który wygląda jak może to zrobić trick rozszerzając form.factory ale jeszcze nie próbował.

+0

Czy udało Ci się go uruchomić na 'Silex 2.0 ~'? – Trix

Odpowiedz

6

Używam this Gist, aby dodać pole EntityType w Silex.

Ale podstępem jest zarejestrowanie rozszerzenia formularza DoctrineOrmExtension przez rozszerzenie form.extensions, jak mówi FormServiceProvider doc.

DoctrineOrmExtension spodziewa interfejs w jego konstruktora ManagerRegistry, które mogą być realizowane rozszerzenie Doctrine\Common\Persistence\AbstractManagerRegistry jako następująco:

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

    } 

} 

Tak, aby zarejestrować rozszerzenie formularz używać:

+0

Wielkie dzięki za to! – Jimbo

+1

Musiałem dodać "symfony/dependency-injection": "~ 2.3" do mojego composer.json. Świetnie się spisałam, dziękuję! – ooXei1sh