问题在buildForm Symfony 2.5内的query

编程入门 行业动态 更新时间:2024-10-26 00:22:55
问题在buildForm Symfony 2.5内的query_builder上注入参数(Problems Inject Parameters on query_builder inside the buildForm Symfony 2.5)

我遇到了Symfony 2.5的一些问题我需要基于我从控制器传递的一些参数来修改表单,但我无法初始化$ options数组到任务。

我的文件:

// ordersContrroller.php $orders=new OrdersM(); $form = $this->createForm(new ListOrdersType(), $orders, array('id'=>1)); // ListOrdersType.php use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\Event\DataEvent; use Symfony\Component\Form\FormEvents; use Doctrine\ORM\EntityRepository; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class ListOrdersType extends AbstractType { public function getDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Acme\MyBundle\Form\Model\OrdersM', 'id'=>1, )); } public function buildForm(FormBuilderInterface $builder, array $options) { var_dump(array_keys($options)); $builder->add('orders', 'entity', array( 'class' => 'AcmeMyBundle:Orders', 'property' => 'name', 'query_builder' => function($repository) use ($options) { return $repository->createQueryBuilder('o') ->where('o.id='.$options['id']) ->orderBy('o.id', 'ASC' ) ; } )); } public function getName() { return 'orders'; } }

我有两个截然不同的问题。 当我把选项数组放在che控制器数组中时('id'=> 1)

我发现以下错误:

选项“id”不存在。 已知选项包括:“action”,“attr”,“auto_initialize”,“block_name”,“by_reference”,“cascade_validation”,“compound”,“constraints”,“csrf_field_name”,“csrf_message”,“csrf_protection”,“csrf_provider” “,”csrf_token_id“,”csrf_token_manager“,”data“,”data_class“,”disabled“,”empty_data“,”error_bubbling“,”error_mapping“,”extra_fields_message“,”inherit_data“,”意图“,”invalid_message“, “invalid_message_parameters”,“label”,“label_attr”,“mapped”,“max_length”,“method”,“pattern”,“post_max_size_message”,“property_path”,“read_only”,“required”,“translation_domain”,“trim “,”validation_groups“,”虚拟“

就像声明解析器的默认选项时未声明选项一样。

当我尝试在query_builder函数上使用键$ option ['id']上的$ options数组时,我得到以下错误:

注意:未定义索引:**** / Form / Type / ListOrdersType.php第56行中的id

那个是这个:

->where('o.id='.$options['id'])

id $选项是ony one,但我真的需要在EntityType.php文件中使用不同的参数进行查询,我真的需要以某种方式将它们传递给选项。

我错过了什么? Tx适合您的时间。

I'm encountering some problem with Symfony 2.5 i've the need to dinamicaly modify a form based on some parameters that i've to pass from the controller but i cant initializate the $options array to the task.

My Files:

// ordersContrroller.php $orders=new OrdersM(); $form = $this->createForm(new ListOrdersType(), $orders, array('id'=>1)); // ListOrdersType.php use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\Form\FormEvent; use Symfony\Component\Form\Event\DataEvent; use Symfony\Component\Form\FormEvents; use Doctrine\ORM\EntityRepository; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class ListOrdersType extends AbstractType { public function getDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Acme\MyBundle\Form\Model\OrdersM', 'id'=>1, )); } public function buildForm(FormBuilderInterface $builder, array $options) { var_dump(array_keys($options)); $builder->add('orders', 'entity', array( 'class' => 'AcmeMyBundle:Orders', 'property' => 'name', 'query_builder' => function($repository) use ($options) { return $repository->createQueryBuilder('o') ->where('o.id='.$options['id']) ->orderBy('o.id', 'ASC' ) ; } )); } public function getName() { return 'orders'; } }

I've TWO distinct problems. When i put the options array in che controller array('id'=>1)

i recive the following error:

The option "id" does not exist. Known options are: "action", "attr", "auto_initialize", "block_name", "by_reference", "cascade_validation", "compound", "constraints", "csrf_field_name", "csrf_message", "csrf_protection", "csrf_provider", "csrf_token_id", "csrf_token_manager", "data", "data_class", "disabled", "empty_data", "error_bubbling", "error_mapping", "extra_fields_message", "inherit_data", "intention", "invalid_message", "invalid_message_parameters", "label", "label_attr", "mapped", "max_length", "method", "pattern", "post_max_size_message", "property_path", "read_only", "required", "translation_domain", "trim", "validation_groups", "virtual"

Like the option is not declared during the declaration of the defaults options of the resolver.

And ofcorse when i try to use the $options array on the key $option['id'] on the query_builder function i get the following error:

Notice: Undefined index: id in ****/Form/Type/ListOrdersType.php line 56

that ofc is this one:

->where('o.id='.$options['id'])

The id $option is ony one , but i realy need to make my query in the EntityType.php files dinaic following differents parameters, i realy need to pass them over options in some way.

What i'm missing? Tx for your time.

最满意答案

尝试这样( getDefaultOptions更改为setDefaultOptions ):

class ListOrdersType extends AbstractType { public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Acme\MyBundle\Form\Model\OrdersM', 'id'=> null, )); } public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('orders', 'entity', array( ... 'query_builder' => function($repository) use ($options) { return $repository->createQueryBuilder('o') ->where('o.id= :id') ->orderBy('o.id', 'ASC' ) ->setParameter('id', $options['id']) ; } )); } ... } $orders=new OrdersM(); $form = $this->createForm(new ListOrdersType(), $orders, array('id'=>1));

Try like this (getDefaultOptions changed to setDefaultOptions):

class ListOrdersType extends AbstractType { public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Acme\MyBundle\Form\Model\OrdersM', 'id'=> null, )); } public function buildForm(FormBuilderInterface $builder, array $options) { $builder->add('orders', 'entity', array( ... 'query_builder' => function($repository) use ($options) { return $repository->createQueryBuilder('o') ->where('o.id= :id') ->orderBy('o.id', 'ASC' ) ->setParameter('id', $options['id']) ; } )); } ... } $orders=new OrdersM(); $form = $this->createForm(new ListOrdersType(), $orders, array('id'=>1));

更多推荐

本文发布于:2023-07-22 12:21:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1219976.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Symfony   buildForm   query

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!