symfony 表单生成器中对象内部的函数

flo*_*low 0 php forms function symfony

我不知道为什么如果我尝试这样做会收到错误:

$builder
->add('product', EntityType::class, array(
'data' => $options['product'],
'placeholder' => 'Wyszukiwarka',
'mapped' => false,
'multiple' => false,
'class' => Products::class,
'attr' => [
    'class' => 'chosen-select order_product',
    'data-placeholder'=>'Wybierz produkt',
    'single_price' => function ($product) {
       $cena = $product->getJson()["products"]["price"];
      dump($cena);
      return $cena;
      }
  ],

'choice_label' => function ($product) {
return  ''.$product->getJson()["products"]["name"] .' | Stan Magazynowy: '.$product->getJson()["products"]["stock"].'';
},
'label' => 'Wybierz produkty'

))
Run Code Online (Sandbox Code Playgroud)

所以,“choice_label”内部的函数工作得很好,为什么我不能在包含此输入的额外属性的 attr 中执行相同的操作。我收到此错误:

An exception has been thrown during the rendering of a template ("Catchable Fatal Error: Object of class Closure could not be converted to string").
Run Code Online (Sandbox Code Playgroud)

为什么 attr 对象内部的函数不起作用?

Nic*_*ich 5

您使用了错误的配置选项。该attr选项不接受回调。在您的情况下 - 根据每个选择的值添加属性 - 您需要使用文档choice_attr中的内容。

示例实现可能如下所示:

$builder->add('attending', ChoiceType::class, array(
    // [..]
    'choice_attr' => function($choiceValue, $key, $product) {
        return [
            'data-single-price' => $product->getPrice()
        ];
    }
));
Run Code Online (Sandbox Code Playgroud)