Die Logging Mechanismen von Symfony2 sind manchmal nicht ganz durchschaubar: wenn irgendwas in den Entities nicht stimmt, kann es sein, dass die Schema Validierung oder auch das Schema Update beim Aufruf des entsprechenden Konsolenkommandos kommentarlos beendet werden. In diesem Fall prüft intensiv, dass die Namespaces und auch die Annotations innerhalb der Entities sowie den Repositories korrekt sind!
Category: Symfony2
[Quicktip] Symfony2 Framework läuft nach Update auf Version 2.3.3 nicht mehr
Nachdem ich eine Symfony2 Installation auf die neueste Version 2.3.3 per Composer geupdatet hatte, bekam ich auf dem Zielsystem per app/console immer wieder die Fehlermeldung
[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException] The parameter "kernel.trusted_hosts" must be defined.
präsentiert. Scheinbar haben diesen Fehler nicht allzu viele Leute, eine Google Suche brachte keine Ergebnisse. Die Formulierung der Fehlermeldung ist auch relativ ungünstig, denn es fehlt kein Parameter, sondern ein Config Eintrag. Kurz gesagt, müsst ihr folgende Zeile in euere app/config/config.yml Datei eintragen:
... framework: ... fragments: ~ trusted_hosts: ~ ...
Anschließend sollte die Symfony2 Console sowie das System an sich wieder laufen.
[Quicktip] Symfony2 Authentifizierung mittels Entity Provider und sha512 Encoder = Bad Credentials
In der sehr guten Symfony2 Doku gibt es natürlich trotzdem die eine oder andere Falltür – ein gutes Beispiel hierfür ist der so halb dokumentierte Fall, dass man User mittels Datenbank anbinden und ihre Passwörter mittels sha-512 encoden möchte.
In der entsprechenden Doku wird im User Model für die Property $password eine Stringlänge von 40 Zeichen angegeben. Das passt auch ganz gut für MD5 oder sha1, aber eben nicht für sha-512. Die Folge: man bekommt nur ein läppisches “Bad Credentials” präsentiert, weil das Passwort in der DB abgeschnitten wird.
Die Zeichenlänge für sha-512 sollte aber deutlich länger sein – 128 ist der sinnvolle Wert. Wer das warum wissen möchte:
512 bits / 8 bits pro byte * 2 hex digits pro byte = 128 hex digits
[Symfony2] Wie kann man bei einem Repository findAll eine Sortierung setzen?
Mit den Magic Methoden der Symfony Repositories kann bekommt man automatisch Methoden wie findBy[Feldname] oder findAll bereitgestellt. Mit dabei ist jedoch keine direkte Möglichkeit, die Ergebnisse bereits zu sortieren. Über einen kleinen Trick geht aber auch das:
Möchte man ein findAll umsetzen, sieht der Code so aus:
$repository->findBy(array(), array('name' => 'asc'));
Jetzt werden alle Entities für dieses Repository geladen, jedoch erfolgt die entsprechende Query mit einem “ORDER BY name ASC”. Möchte man das findAll in eine spezifizierte Suche umwandeln, muss man das erste Array einfach mit dem gewünschten Feldnamen und dem zu suchenden Wert befüllen:
$repository->findBy(array('active' => 1), array('name' => 'asc'));