Ich brauche Hilfe bei der Verwendung von Symfony2.1 Formen mit method = GET und einem sauberen URL-Raum.Symfony2.1 mit Formular mit Methode GET
Ich erstelle einen "Filter", den ich in der URL einstellen möchte, damit Leute ihre Links bookmarken können.
Also, ganz einfach der Code:
$form = $this->createFormBuilder($defaultData)
->add('from', 'date', array('required' => false, 'widget' => 'single_text', 'format' => 'dd.MM.yyyy'))
ich mache das Formular Widget und alles ist in Ordnung.
Jedoch, wenn ich das Formular abschicken, erzeugt es sehr hässlich GET-Parameter:
/app_dev.php/de/event?form%5Bfrom%5D=17.11.2012
Dies ist, weil der Eingangsname natürlich form[from]
So die URL Raum zu reinigen, machte ich mich ein Thema:
{% block widget_attributes %}
{% spaceless %}
id="{{ id }}" name="{{ id }}"{% if read_only %} disabled="disabled"{% endif %}{% if required %} required="required"{% endif %}{% if max_length %} maxlength="{{ max_length }}"{% endif %}{% if pattern %} pattern="{{ pattern }}"{% endif %}
{% for attrname,attrvalue in attr %}{{attrname}}="{{attrvalue}}" {% endfor %}
{% endspaceless %}
{% endblock widget_attributes %}
wo ich name="{{ full_name }}"
mit name="{{ id }}"
ersetzt.
Das funktioniert gut - mein URL Raum ist sauberer:
/app_dev.php/de/event?form_from=17.11.2012
Ich glaube, ich damit leben könnte - obwohl idealerweise from=xxx
wäre besser. Das ist das erste und kleinere Problem.
Das zweite Problem ist, dass ich nicht die Form mehr zu binden, erhalten - dies ist offensichtlich, weil der Parameter „Form“ nicht mehr gesetzt - „form_from“ es ersetzt hat, aber wenn Sie tun, um ein bind es erwartet immer noch form [].
Ich habe versucht, das wie dieses Problem zu beheben:
$fromDate = $this->get('request')->query->get('form_from', null);
$request->query->set('form', array('from' => $fromDate);
Aber das funktioniert nicht. Ich vermute auch, dass ich gerade ein riesiges Loch von Hacks gräbe.
Also, die Frage ist: sollte ich nur mit der URL form%5Bfrom%5D
leben, oder gibt es eine bessere Möglichkeit, all dies (ohne Verwendung von POST offensichtlich) zu tun?
Ist es möglich, so etwas zu tun, wenn Sie FormTypes als Dienste verwenden?Ich glaube nicht, dass Sie in diesem Kontext auf createNamedBuilder zugreifen und FormType :: getName() {return ''; } verursacht Probleme, die den FormType als einen Dienst verweisen. – caponica
Natürlich können Sie auf createNamedBuilder() zugreifen, Sie müssen nur auf die Formular-Factory zugreifen :) –
'$ builder-> getFormFactory()' ... wer wusste? Vielen Dank! – caponica