选择2 with Symfony with custom tags
我的建议是我想要一个select2下拉列表,允许用户选择多个选项。但是当他们选择一个选项时,我想让选择栏显示所选项目的缩写。现在我有一个键值数组,其中键是缩写,值是全文 现在,当我选择一个选项时,我找不到获取数组“原始”键的方法。我也看不到任何与数组键相关的内容 形式类 看法 Javascript选择2 with Symfony with custom tags,symfony,jquery-select2,Symfony,Jquery Select2,我的建议是我想要一个select2下拉列表,允许用户选择多个选项。但是当他们选择一个选项时,我想让选择栏显示所选项目的缩写。现在我有一个键值数组,其中键是缩写,值是全文 现在,当我选择一个选项时,我找不到获取数组“原始”键的方法。我也看不到任何与数组键相关的内容 形式类 看法 Javascript $(文档).ready(函数(){ $(“#形成关系”)。选择2({ closeOnSelect:false, 占位符:“占位符”, allowHtml:是的, allowClear:是的, 多重:
$(文档).ready(函数(){
$(“#形成关系”)。选择2({
closeOnSelect:false,
占位符:“占位符”,
allowHtml:是的,
allowClear:是的,
多重:对
});
});
现在,当您选择一个选项时,它将只使用数组的值,但是我想使用缩写。我尝试记录所选选项,但这似乎不包含数组的键。我还尝试查看symfony返回到视图的数组,它似乎用增量索引替换键,而不是保留我自己的索引。是否有办法确保symfony保留我自己的密钥,并在使用select2JS选择选项时使用这些密钥?解决方案应该是为您的选项设置额外的数据属性。为此,您应该使用对象来设置您的选择。因此,让我们先添加一个新的选项类:
namespace App\Model;
class MyOption
{
private $name;
private $abbreviation;
public function __construct($name, $abbreviation) {
$this->name = $name;
$this->abbreviation = $abbreviation;
}
function getName() {
return $this->name;
}
function getAbbreviation() {
return $this->abbreviation;
}
}
现在在formType中创建下拉列表,如下所示:
use App\Model\MyOption;
结果是:
<select id="product_option_relations" name="product_option[relations]">
<option value="0" data-abbreviation="isp">Internet service provider</option>
<option value="1" data-abbreviation="db">Database</option>
</select>
namespace App\Model;
class MyOption
{
private $name;
private $abbreviation;
public function __construct($name, $abbreviation) {
$this->name = $name;
$this->abbreviation = $abbreviation;
}
function getName() {
return $this->name;
}
function getAbbreviation() {
return $this->abbreviation;
}
}
use App\Model\MyOption;
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('relations', ChoiceType::class, [
'choices' => [
new MyOption('Internet service provider', 'isp'),
new MyOption('Database', 'db'),
],
'choice_label' => function(MyOption $option, $key, $value) {
return $option->getName();
},
'choice_attr' => function(MyOption $option, $key, $value) {
return ['data-abbreviation' => $option->getAbbreviation()];
},
]);
}
<select id="product_option_relations" name="product_option[relations]">
<option value="0" data-abbreviation="isp">Internet service provider</option>
<option value="1" data-abbreviation="db">Database</option>
</select>
$("#product_option_relations").find(':selected').data('abbreviation');