相关疑难解决方法(0)

在Symfony 2.8,3.0及更高版本中将数据传递给buildForm()

我的应用程序当前使用构造函数将数据传递给我的表单类型,如本答案中所建议的那样.但是,Symfony 2.8升级指南建议不要使用将类型实例传递给该createForm函数:

将类型实例传递给Form :: add(),FormBuilder :: add()和FormFactory :: create*()方法已弃用,在Symfony 3.0中将不再受支持.传递类型的完全限定类名.

Before:    
$form = $this->createForm(new MyType());

After:
$form = $this->createForm(MyType::class);
Run Code Online (Sandbox Code Playgroud)

由于我无法通过完全限定的类名传递数据,还有其他选择吗?

php symfony

83
推荐指数
4
解决办法
5万
查看次数

Symfony 2 - 如何将数据传递给formBuilder?

我在我的表单中使用实体选择列表.我只想使用特定的实体(例如:只有用户所属的组)因此,在控制器中,我正在获取这些组,并试图将它们传入formBuider.

控制器:

/.../
$groups = $em->getRepository('VendorMyBundle:Group')->getUserGroups($user);
$form = $this->createForm(new Message($groups), $message);
/.../
Run Code Online (Sandbox Code Playgroud)

所以现在怎么办?如何在formBuilder中使用它?如何更改此行以使用传递的组数组?

->add('group','entity',array('class' => 'Vendor\MyBundle\Entity\Group', 'label'=>'Group:'))
Run Code Online (Sandbox Code Playgroud)

或者以另一种方式:

class MessageType
{
/.../
  public function buildForm(FormBuilder $builder, array $options)
  {
    $builder
      ->add('group','entity',
        array(
          'class' => 'Vendor\MyBundle\Entity\Group',
          'property' => 'name',
          'query_builder' => function ($repository) {
            $qb = $repository->createQueryBuilder('group');
            $qb->add('where', 'group.administrator = :user');
            $qb->setParameter('user', $user->getId());
            return $qb;
          },
          'label' => 'Group'
        )
      )
      // Continue adding fields
    ;
  }
/.../
}
Run Code Online (Sandbox Code Playgroud)

那么如何让对象$ user在表单构建器中使用?($ user表示当前登录的用户)

php formbuilder symfony

36
推荐指数
3
解决办法
5万
查看次数

如何在symfony2中的表单类型类中获取doctrine存储库?

$repository = $this->getDoctrine()->getRepository('ParabolaEntityBundle:ProjectAllocation');
        $query = $repository->createQueryBuilder('p')
                ->where('p.startDate < :sdate and p.employee = :emp and p.endDate > :edate')
                ->setParameter('sdate', date('Y-m-d', time()))
                ->setParameter('edate', date('Y-m-d', time()))
                ->setParameter('emp', $employee->getId())
                ->getQuery();
        $projectAllocate = $query->getResult();
Run Code Online (Sandbox Code Playgroud)

我如何在FormType类中使用上面的代码.我正在使用此查询为表单生成器中的选择类型生成数组.

formbuilder symfony

5
推荐指数
1
解决办法
1万
查看次数

Symfony:在表单中使用查询构建器

我有一个使用 FormBuilder 构建的表单:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('rosters',   'entity',   array(
            'class' => 'ReliefAppsPlatformBundle:Roster',
            'property' => 'display',
            'query_builder' => function(RosterRepository $r) use ($user) {
                return $r->createQueryBuilder('r')
                    ->leftJoin('r.members', 'm')
                    ->addSelect('m')
                    ->where('(m.rights = :adminRight or m.rights = :managerRight) and m.user = :user')
                    ->setParameter('adminRight', RosterMember::ADMIN_LEVEL)
                    ->setParameter('managerRight', RosterMember::MANAGER_LEVEL)
                    ->setParameter('user', $user);
            },
            'required' => true,
            'expanded' => true,
            'multiple' => true
        ))
        ->add('save', 'submit')
    ;
}
Run Code Online (Sandbox Code Playgroud)

如您所见,我的 QueryBuilder 使用 $user(当前用户)作为参数。我的控制器看起来像这样:

public function createAction(Request $request, Event $event)
{
    $alert = new RosterEvent;
    $alert->setEvent($event); …
Run Code Online (Sandbox Code Playgroud)

query-builder symfony

5
推荐指数
1
解决办法
1125
查看次数

标签 统计

symfony ×4

formbuilder ×2

php ×2

query-builder ×1