Dieses Blog durchsuchen

Montag, 16. Juli 2012

SYMFONY: sfDoctrineGuard installieren (ver 1.3 und 1.4)


Folgende Schritte müssen erfolgen um das Plugin erfolgreich  zu installieren:

1.1. Installieren:

        symfony plugin:install sfDoctrineGuardPlugin
 
1.2. Das Model aufbauen:

symfony doctrine:build-model
symfony doctrine:build-filters
symfony doctrine:build-sql
 
1.3. Tabellen in die DB exportieren:
 
        symfony doctrine:insert-sql
 
1.4. Asserts des Plugins zu Verfügung stellen:
 
        Symfony plugin:publish-asserts
 
1.5. sfGuard Module in das frontend und backend einbinden:
   In der settings.yml folgenden Eintrag hinzufügen:
               -für das backend:
 
        all:
     .settings:
           enabled_modules:    [default, sfGuardAuth, sfGuardGroup, 
                                sfGuardUser, sfGuardPermission]
 
        -für das frontend: 
 
        all:
         .settings:
           enabled_modules:    [default, sfGuardAuth]
 
1.6. Das login und security Modul des sfGuard als Standard festlegen:
               In der settings.yml folgenden Eintrag einbinden:
 
           login_module:           sfGuardAuth
           login_action:           signin
 
           secure_module:          sfGuardAuth
           secure_action:          secure
  
1.7.  Die Eltren-Klasse für myUser in sfGuardSecurity änden:
class myUser extends sfGuardSecurityUser
{
}
  
1.8. Neue Routen in der routing.yml hinzufügen:
 
sf_guard_signin:
  url:   /login
  param: { module: sfGuardAuth, action: signin }
 
sf_guard_signout:
  url:   /logout
  param: { module: sfGuardAuth, action: signout }
 
sf_guard_password:
  url:   /request_password
  param: { module: sfGuardAuth, action: password }
 
1.9. Cash leeren:
 
               cash clearen: symfony cc
 
1.10. Unter der Adresse:

http://www.mein-server.com/backend.php/sfGuardUser

erhalten Sie jetzt eine Übersicht aller Benutzer und die Möglichkeit neue zu erstellen und vorhandene zu bearbeiten

Dienstag, 29. November 2011

SYMFONY: Die Formatierung einer Form selbst festlegen (Version: Symfony v.1.4.15)

Symfony nimmt einem sehr viel Arbeit ab. Das gilt auch für die Forms. Schnell hat man die als Ableitung von der BaseForm definiert, hier als Beispiel eine Login-Form:

class LoginForm extends BaseForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'login'      => new sfWidgetFormInputText(),
      'pwd'        => new sfWidgetFormInputPassword(),
    ));
 }

Danach wird die neue Form in einer Action erzeugt:
$this->login_form = new LoginForm();

und in einem Template angezeigt:
<?php echo $login_form ?>

Dabei wird die Form von Symfony gerändert. Die Eingabefelder werden standardmäßig untereinander angezeigt. Was aber wenn man die Felder anders anzeigen möchte als von Symfony vorgegeben?

Dann muss man einen eigenen Formatter schreiben. Das folgende einfache Beispiel zeigt wie man die Eingabefelder der obigen Form nebeneinander mit Labels über dem Eingabefeld anzeigt kann.

Als erstes muss man eine neue Klasse erstellen die von der Klasse „sfWidgetFormSchemaFormatter" abstammt. Dafür legt man ein neues Verzeichnis unterhalb des Verzeichnisses \lib an:
\lib\widget\

In diesem Verzeichnis legt man eine neue Datei an, deren Name exakt dem Namen des neuen Formatters entsprichen muss. Für das Bespiel „MyFormatter“ wird es folgend aussehen:
\lib\widget\WidgetFormSchemaFormatterMyFormatter.php

Man öffnet die Datei und definiert eine neue Klasse:

class sfWidgetFormSchemaFormatterMyFormatter extends sfWidgetFormSchemaFormatter {}

Vorerst ist die Klasse leer. Als nächstes muss man sie mit Leben fühlen:
class sfWidgetFormSchemaFormatterMyFormatter extends sfWidgetFormSchemaFormatter
{
   protected
      $rowFormat = '<div style="float:left; padding:0;margin:0;padding-right:5px;"> %label% <br> %field% </div>';
}


Mit $rowFormat wird festgelegt wie eine Zeile der Form auszusehen hat. Hier wird ein ganz gewöhnlicher HTML-Code eingetragen. In dem Beispiel wird das %label% über dem %field% angezeigt. Durch die Angabe des Style: float:left wird erreicht, dass die Elemente nebeneinander angezeigt werden.

Jetzt muss man nur noch der LoginForm mitteilen, dass die den neuen Formatter nutzen soll. Dies erreicht man durch folgenden Eintrag innerhalb der Form-Klasse:
$this->widgetSchema->setFormFormatterName('MyFormatter');

Beachten Sie, dass das Argument "MyFormatter" der Namenserweiterung der Klasse sfWidgetFormSchemaFormatter gleich sein muss. Also in diesem Fall "MyFormatter".

Die um eigenen Formatter erweiterte Form-Klasse sieht dann folgend aus:

class LoginForm extends BaseForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'login'      => new sfWidgetFormInputText(),
      'pwd'        => new sfWidgetFormInputPassword(),
    ));
   $this->widgetSchema->setFormFormatterName('MyFormatter');
 }


Wenn man die Form im Template aufruft, dann werden die Eingabefelder in einer Reihe und die Labels über dem Eingabefeld angezeigt.

Der Text unterliegt dem Copyright und darf nicht vervielfältigt werden ohne unsere Zustimmung.