Ich habe ein einfaches Modell bekommt (die Quelle vereinfacht):Form: Vermeiden Sie nicht eingereicht Feld null Einstellung
class Collection
{
public $page;
public $limit;
}
Und einen Formulartyp:
class CollectionType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('page', 'integer');
$builder->add('limit', 'integer');
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'FSC\Common\Rest\Form\Model\Collection',
));
}
}
Mein Controller:
public function getUsersAction(Request $request)
{
$collection = new Collection();
$collection->page = 1;
$collection->limit = 10;
$form = $this->createForm(new CollectionType(), $collection)
$form->bind($request);
print_r($collection);exit;
}
Wenn ich POST /users/?form[page]=2&form[limit]=20
bin, ist die Antwort, was ich erwarte:
Collection Object
(
[page:public] => 2
[limit:public] => 20
)
, wenn ich POST /users/?form[page]=3
, die Antwort ist:
Collection Object
(
[page:public] => 3
[limit:public] =>
)
limit
wird null, weil es nicht vorgelegt wurde.
Ich wollte
Collection Object
(
[page:public] => 3
[limit:public] => 10 // The default value, set before the bind
)
Frage bekommen: Wie kann ich das Formular Verhalten zu ändern, so dass es nicht vorgelegten Werte ignoriert?
Mein Formular wird in vielen Controllern verwendet, so dass dies zu Wiederholungen führen wird. – AdrienBrault
@AdrienBrault Ja, aber Sie müssen eine Route für jeden gleich definieren ... Eine bessere Lösung könnte sein, nur einen Controller zu verwenden, der darin einen Dispatcher aufruft, der Sie zum richtigen Controller führt .... – DonCallisto
Ich denke dass ein Zuhörer besser wäre als ein Dispatcher. Wie auch immer, hier, ich frage nach einer Lösung auf der Formularebene. – AdrienBrault