是否可以更改表单下拉列表的内容,该表单下拉列表是使用propel填充的表单集合的一部分,但未映射数据。获取以下数据的代码示例:
地址类型:
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->
->add("addressOne", new addressOneType()),
->add("addressTwo", new addressTwoType(), array(
"required" => false,
)),
}
addressOneType:
public function buildForm(FormBuilderInterface $builder, array $options){
$builder->
->setMethod('POST')
->add('Country', 'model', array(
'mapped' => 'bundle\nameBundle\Model\Countries',
'required' => true,
'multiple' => false,
'expanded' => false,
'property' => 'label',
'query' => CountryQuery::create()->find(),
))
->getForm();
}
此集合用于应用程序的特定部分,但在此部分需要从表单本身调用服务。这是可能的,因为我试图扩展ContainerInterface并在构造方法中声明这个,但这只会引发错误。
但是,我认为这是因为表单构建器未声明为服务。
通过注入新模型来覆盖原始模型,是否有更简单的方法来更改下拉菜单的数据。例如:
$form = $this->createForm(new AddressType());
$newData = CountriesQuery::create()
->orderBy("different_field");
$form['collectionName']['fieldname']->setData($newData);
执行上述操作不会更改或覆盖正在更改数据的原始模型。在->find()
字段末尾有$newData
或不带{{1}}。
是否有人知道如何覆盖模型的数据集?
答案 0 :(得分:0)
传递特定选项的一种非常简单的方法是在构造函数中...
class addressOneType
{
protected $countryQuery;
public function __constructor( $countryQuery = null )
{
$this->countryQuery = $countryQuery;
}
public function buildForm(FormBuilderInterface $builder, array $options){
$query = $this->countryQuery ? $this->countryQuery :
CountryQuery::create();
$builder
->setMethod('POST')
->add('Country', 'model', array(
'mapped' => 'bundle\nameBundle\Model\Countries',
'required' => true,
'multiple' => false,
'expanded' => false,
'property' => 'label',
'query' => $query->find(),
))
->getForm();
}
}
...你可以用这种方式打电话给表格......
$cQuery = CountriesQuery::create()->orderBy("different_field");
$form = $this->createForm(new AddressType($cQuery));