Posts Tagged ‘symfony’

Symfony und Webentwickler Cheatsheets

Posted in Webentwicklung on July 20th, 2009 by admin – Be the first to comment

Dieser Artikel schreibt sich meiner Meinung nach fast wie ein Programm mit Symfony, man hat eine Idee und den Rest macht das Framework :D Statt stundenlang das Netz nach guten Cheatsheets zu durchsuchen oder selbst welche zu entwerfen, reicht ein Blick ins Symfony-Wiki:

Weitere tolle Cheatsheets für die Webentwicklung findet man dann noch bei Added Bytes:

Und zum Schluss noch für AJAX:

Im Gunde nichts weltbewegend Neues, aber hilfreich, wie ich finde :D
Wünsch allen einen guten Start in die Woche.

Element-Update mit JavaScript als Inhalt

Posted in JavaScript, Symfony Framework on July 19th, 2009 by admin – Be the first to comment

In Symfony haben wir ja eine sehr hilfreiche und dem entsprechend auch Helper genannte Kapselung von JavaScript Bibliotheken. So steht auch unter anderem Prototype zur Verfügung. Nur manchmal lässt sich die API-Dokumentation der Bibliotheken nicht direkt auf die in Symfony zur Verfügung stehenden Funktionen übertragen. Ein Beispiel ist der evalScripts Parameter. Für alle die jetzt zu faul sind weiter zu lesen und schon wissen was gemeint ist: In Symfony heißt der Parameter einfach nur script

Für alle die noch nicht Wissen wofür der Parameter gebraucht wird, kommt hier ien Beispiel:

Die Funktion remote_function() ist das Symfony-Interface zur AjaxUpdater-Funktion von Prototype, mit der wir ein DOM-Element unserer Seite mit neuem Inhalt befüllen können ohne die komplette Seite neu zu laden (ist ja auch der Sinn von AJAX-Funktionen xD).

Das ganze könnte dann beispielsweise in einem Template so aussehen:

  1. <?php use_helper(‘Javascript’) ?>
  2. <div id="dynamicContent"></div>
  3. <?php echo javascript_tag(
  4.    "function updateDynContent() {".remote_function(array(
  5.    ‘update’  => ‘dynamicContent’,
  6.    ‘url’     => ‘artikel/render’,
  7.  ))."}"
  8. ) ?>

Soweit so gut. Ein kleines Problem haben wir jetzt nur, wenn der Aufruf des Moduls/Action ‘artikel/render’ in seinem Template ein JavaScript hat. Beispielsweise durch die Funktion drop_receiving_element(), weil in dem DIV mit der ID dynamicContent ein Element sein soll, welches Drag-And-Drop fähig sein soll. Standartmäßig werden nämlich JavaScripts durch den Ajax.Updater gefiltert. Abschalten lässt sich das bei dieser Prototype-Funktion durch den Parameter evalScripts. Die Symfony-Funktion remote_function() akzeptiert diesen Parameter allerdings nicht, sondern wie am Anfang schon erwähnt den Parameter script. Um diesen Parameter und folglich dann ohne JavaScript-Filter sieht der Funktions-Aufruf aus dem Beispiel dann folgendermaßen aus:

  1. remote_function(array(
  2.    ‘update’  => ‘dynamicContent’,
  3.    ‘url’     => ‘artikel/render’,
  4.    ’script’ => ‘true’,
  5.  ))

Das wars schon =)

Password-Validation in Symfony 1.2

Posted in Symfony Framework, Webentwicklung on July 17th, 2009 by admin – Be the first to comment

Ich habe eben zum ersten mal ein Registrierungsformular für eine Anwendung im Symfony Framework geschrieben. So etwas kann man ja durchaus mal öfters gebrauchen daher stell ich die sfForm Klasse hier für alle zur Verfügung.

Übrigens der sfValidatorSchemaCompare funktioniert erst wenn die Felder darin mit einem Validator initiiert sind, da er ein globaler Validator ist (siehe in der Doku). In dem Beispiel werden die beiden Passwortfelder mit jeweils dem sfValidatorString und das erste noch mit dem sfValidatorRegex initiiert.

  1. class RegistrationForm extends sfForm {
  2.  public function configure() {
  3.   $this->setWidgets(array(
  4.    ‘username’      => new sfWidgetFormInput(),
  5.    ‘password1′     => new sfWidgetFormInputPassword(),
  6.    ‘password2′     => new sfWidgetFormInputPassword(),
  7.    ‘email’         => new sfWidgetFormInput(),
  8.    ));
  9.  
  10.   $this->setValidators(array(
  11.    ‘username’   => new sfValidatorString(array(
  12.       ‘max_length’ => 30,
  13.       ‘required’ => true)),
  14.    ‘email’         => new sfValidatorEmail(),
  15.    ‘password1′  => new sfValidatorAnd(array(
  16.      new sfValidatorRegex(array(
  17.        ‘pattern’ => "/[[:upper:]+[:lower:]+[digit:]+/")),
  18.      new sfValidatorString(array(
  19.        ‘min_length’ => 8)
  20.    ))),
  21.    ‘password2′  => new sfValidatorString(array(
  22.        ‘min_length’ => 8,
  23.        ‘required’ => true)),
  24.    ));
  25.    $this->validatorSchema->setPostValidator(new sfValidatorAnd(array(
  26.      new sfValidatorSchemaCompare(‘password1′, ‘==’, ‘password2′),
  27.      new sfValidatorPropelUnique(array(
  28.        ‘model’ => ’sfGuardUser’,
  29.        ‘column’ => ‘username’,
  30.        ‘field’ => ‘username’))
  31.    )));
  32.   }
  33. }

Mit dem RegEx Validator lässt sich dann schön überprüfen, ob das Passwort den eigenen Sicherheitsrichtlinien entspricht. Im Beispiel muss das Passwort mindestens ein Großbuchstabe, ein Kleinbuchstabe und eine Ziffer enthalten.
Für die Regulären Ausdrücke hier noch der Link zu einem Cheatsheet, falls noch nicht bekannt :D

Wenn jemand eine Adaption auf ältere Symfony Versionen versucht, dann muss er auf jeden Fall den Compare-Validator ändern in:

  1. $this->validatorSchema->setPostValidator(new sfValidatorSchemaCompare(‘password1′, sfValidatorSchemaCompare::EQUAL, ‘password2′));

Da Symfony 1.2 abwärtskompatibel in diesem Punkt ist, funktionieren dort beide Varianten.

Zum Schluss wird dann mit sfValidatorPropelUnique noch überprüft ob der Username bereits verwendet wird.

Jetzt werde ich dem ganzen noch die Verifikation der E-Mail mit einem Aktivierungsschlüssel verpassen, dazu näheres dann in einem weiteren Beitrag.

Symfony Framework 1.2.8 Update

Posted in Symfony Framework on July 15th, 2009 by admin – Be the first to comment

Es steht ein Update des PHP Frameworks Symfony im stabilen Zweig 1.2 zur Verfügung. In der nun aktuellen Version 1.2.8 wurde ein Sicherheitsfix, der mit Verison 1.2.6 eingeführt wurde, wieder Rückgängig gemacht, da er zu Problemen führte.

Das komplette Changelog ist hier zu finden und die aktuelle Version zum Download.

Dann nur noch hoffen das die Anwendungen anschließend auch wirklich wieder laufen wie sie sollen xD