如何在symfony2中调用表单类型的实体库函数
我想调用表单类型类中的函数。函数生成数组,并在实体存储库类中编写。使用该数组,我将生成动态表单字段。 下面是实体存储库类函数如何在symfony2中调用表单类型的实体库函数,symfony,entity,symfony-2.2,formbuilder,Symfony,Entity,Symfony 2.2,Formbuilder,我想调用表单类型类中的函数。函数生成数组,并在实体存储库类中编写。使用该数组,我将生成动态表单字段。 下面是实体存储库类函数 public static $roleNameMap = array( self::ROLE_SUPER_ADMIN => 'superAdmin', self::ROLE_MANAGEMEN => 'management', self::ROLE_MANAGERS => 'mana
public static $roleNameMap = array(
self::ROLE_SUPER_ADMIN => 'superAdmin',
self::ROLE_MANAGEMEN => 'management',
self::ROLE_MANAGERS => 'manager',
self::ROLE_IT_STAFF => 'itStaff',
self::ROLE_CS_CUSTOMER => 'csCustomer',
self::ROLE_CS => 'cs',
self::ROLE_DEALER => 'dealer',
self::ROLE_ACCOUNT_STAFF => 'accountStaff',
self::ROLE_BROKER_USER => 'staff',
);
public function getGroupListArray()
{
$qb = $this->createQueryBuilder('g')
->orderBy('g.hierarchy','ASC');
$query = $qb->getQuery();
$groupList = $query->execute();
$roleNameMap = array();
foreach ($groupList as $role){
$roleNameMap[$role->getId()] = $role->getRole();
}
return $roleNameMap;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('routeId', 'hidden');
foreach (GroupListRepository::$roleNameMap as $key=>$value){
$builder->add($value, 'checkbox',array('label' => '', 'required' => false,));
}
}
下面是我的FormBuilder类,我想在其中调用上面的实体存储库函数
public static $roleNameMap = array(
self::ROLE_SUPER_ADMIN => 'superAdmin',
self::ROLE_MANAGEMEN => 'management',
self::ROLE_MANAGERS => 'manager',
self::ROLE_IT_STAFF => 'itStaff',
self::ROLE_CS_CUSTOMER => 'csCustomer',
self::ROLE_CS => 'cs',
self::ROLE_DEALER => 'dealer',
self::ROLE_ACCOUNT_STAFF => 'accountStaff',
self::ROLE_BROKER_USER => 'staff',
);
public function getGroupListArray()
{
$qb = $this->createQueryBuilder('g')
->orderBy('g.hierarchy','ASC');
$query = $qb->getQuery();
$groupList = $query->execute();
$roleNameMap = array();
foreach ($groupList as $role){
$roleNameMap[$role->getId()] = $role->getRole();
}
return $roleNameMap;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$builder->add('routeId', 'hidden');
foreach (GroupListRepository::$roleNameMap as $key=>$value){
$builder->add($value, 'checkbox',array('label' => '', 'required' => false,));
}
}
我能够获得上面代码中所示的静态变量,但我不知道如何访问symfony2中form builder类中的存储库函数
提前谢谢 它在表单生成器中不可用,通常也不需要。这也不是Symfony表单的工作方式。对于你想做的事情,你可以试试这样的。它将创建与角色列表对应的复选框列表
$builder->add(
'roles',
'entity',
array(
'class' => 'Acme\DefaultBundle\Entity\Group',
'expanded' => true,
'multiple' => true,
'property' => 'role', // Or use __toString()
'query_builder' => function ($repository) {
return $repository->createQueryBuilder('g')
->orderBy('g.hierarchy', 'ASC');
}
)
);
看
如果您确实需要表单生成器中的存储库,则将表单类型创建为服务,并向实体管理器注入DIC。或者在创建表单类型时直接将其传递到表单类型中。您不需要创建查询生成器函数,可以使用存储库中的查询,如下所示: 形式如下:
'query_builder' => function(MyCustomEntityRepository $ttr) {
return $ttr->queryForCustomResultsWithQueryBuilder();
}
在存储库中:
public function queryForCustomResultsWithQueryBuilder($published=true) {
$queryBuilder = $this->getEntityManager()->createQueryBuilder();
return $queryBuilder->select('tt')
->from('ifm\CustomBundle\Entity\CustomEntity','tt')
->where('tt.published = ?1')
->orderBy('tt.code', 'ASC')
->setParameters(array(1=>$published))
;
}
请注意,queryForCustomResultsWithQueryBuilder返回的是QueryBuilder,而不是结果。如果还需要一个结果,则需要在reposiory中编写一个find函数