setTranslationCatalogue vom sfWidgetFormSchemaFormatter einsetzen

Geschrieben von Dejan Spasic • Tuesday, 23. November 2010 • Kategorie: PHPKommentare (0)

Mit der sfWidgetFormSchemaFormatter::setTranslationCatalogue hat man die Möglichkeit, den Cataloguenamen für die Übersetzung zu setzen. Aber Vorsicht, dies sollte logischerweise erst nach dem man den sfWidgetFormSchemaFormatter für das Formular definiert hat setzen.

//Falsch
$this->widgetSchema->getFormFormatter()->setTranslationCatalogue('user');
$this->widgetSchema->setFormFormatterName('table');

//Richtig
$this->widgetSchema->setFormFormatterName('table');
$this->widgetSchema->getFormFormatter()->setTranslationCatalogue('user');

So viel dazu.

Tags für diesen Artikel: , ,

Deutsche Übersetzung der Fehlermeldungen des Symfony Validators sfValidatorFile

Geschrieben von Dejan Spasic • Monday, 22. November 2010 • Kategorie: PHPKommentare (0)
Hier die deutsche Übersetzung für die Fehlermeldungen des sfValidatorFile.
<trans-unit>
        <source>form.image.error.maxSize</source>
        <target>Datei ist zu groß (maximum sind %max_size% bytes).</target>
      </trans-unit>
      <trans-unit>
        <source>form.image.error.mimeType</source>
        <target>Der mime type ist invalide (%mime_type%).</target>
      </trans-unit>
      <trans-unit>
        <source>form.image.error.partial</source>
        <target>Die Datei konnte nicht vollständig übertragen werden.</target>
      </trans-unit>
      <trans-unit>
        <source>form.image.error.required</source>
        <target>Es wurde keine Datei angegeben.</target>
      </trans-unit>
      <trans-unit>
        <source>form.image.error.noTempDir</source>
        <target>Das temporäre Verzeichnis konnte nicht gefunden werden.</target>
      </trans-unit>
      <trans-unit>
        <source>form.image.error.cantWrite</source>
        <target>Die Datei kann nicht auf der Festplatte geschrieben werden.</target>
      </trans-unit>
      <trans-unit>
        <source>form.image.error.extension</source>
        <target>Die Dateiendung ist nicht richtig.</target>
      </trans-unit>
Eingesetzt wird das Ganze folgendermaßen.
<?php 

class ddUploadImageForm extends sfForm
{
  public function configure()
  {
    $this->setWidgets(array(
      'image' => new sfWidgetFormInputFile(),
    ));

    $this->setValidators(array(
      'image' => new sfValidatorFile(array(
        'required' => true,
        'max_size' => 20000000,
      )),
    ));

    //set the catalogue for i18n 
    $this->widgetSchema->getFormFormatter()->setTranslationCatalogue('uploadImage');

    $this->validatorSchema['image']->setMessage(
      'required',
      'form.error.required'
    );
    $this->validatorSchema['image']->setMessage(
      'max_size',
      'form.image.error.maxSize'
    );
    $this->validatorSchema['image']->setMessage(
      'mime_types',
      'form.image.error.mimeType'
    );
    $this->validatorSchema['image']->setMessage(
      'partial',
      'form.image.error.partial'
    );
    $this->validatorSchema['image']->setMessage(
      'no_tmp_dir',
      'form.image.error.noTempDir'
    );
    $this->validatorSchema['image']->setMessage(
      'cant_write',
      'form.image.error.cantWrite'
    );
    $this->validatorSchema['image']->setMessage(
      'extension',
      'form.image.error.extension'
    );
  }

}
Tags für diesen Artikel: , ,

Diem: Das Layout um eine weitere Eigenschaft erweitern

Geschrieben von Dejan Spasic • Wednesday, 17. November 2010 • Kategorie: PHPKommentare (0)

In der letzten Zeit durfte ich mich mal etwas mit dem CMF Diem auseinandersetzen und wollte aus diesem Grund ein Paar How-To's veröffentlichen die, meiner Meinung nach, in der Dokumentation der offiziellen Homepage nicht zufriedenstellend sind oder sogar gänzlich vermisst werden. Dies sollte nicht missverstanden werden, denn die Dokumentation des Projekts ist durchaus gut, nur weisen sie in manchen Bereichen Lücken auf.

Das Model DmLayout erweitern

In diesem Post möchte ich aufzeigen, wie wir das Layout dahingehen erweitern, dass im Backend ebenfalls eine id für das HTML-Tag body angegeben werden kann. Dazu muss erstmal das Model DmLayout um ein weiteres Feld erweitert werden. Symfony bietet hier eine recht elegante Lösung ein bereits existierendes Model aus einem Plugin zu erweitern, ohne die schema.yml des Plugins anpassen zu müssen. Was in der Praxis bedeutet, dass man die schema.yml des Projekts mit folgenden Zeilen erweitert:

DmLayout:
  package: dmCorePlugin.lib.model.doctrine
  columns:
    body_id:
      type: string(20)
      notnull: false

Im Grunde genommen ist das Schlüsselwort die Direktive "package". Der Wert stellt den Pfad des Models relativ vom Verzeichnis plugin dar. Wobei die Punktnotation als Verzeichnis-Trenner verwendet wird. Danach sollte die Datenbank mit dem kommenden Befehlen entsprechend erweitert werden.

Hinweis: Sicherheitshalber sollte man ein Dump der Datenbank erstellen, bevor man das Kommando ./symfony doctrine:migrate ausführt.
./symfony doctrine:generate-migrations-diff
./symfony doctrine:migrate
./symfony dm:setup

Den Admin-Generator anpassen

Dank der kaskadierenden Eigenschaften die Symfony mit sich bringt, ist das erweitern des Admin-Generators ein leichtes. Es muss lediglich das Module dmLayout in der Applikation admin mit entsprechender Verzeichnis-Struktur hinzugefügt werden und ein Teilbereich der generator.yml Einstellung erweitert werden.

modules
|  
`-- dmLayout
   `-- config
       `-- generator.yml

Der Inhalt der generator.yml:

generator:
 class: dmAdminDoctrineGenerator
 param:
   config:
     fields:
       body_id:
         label: "Body id"
         help: "This ID applied to the body tag"
     form:
       display:
         NONE: [name, css_class, body_id]

Nach dem man das Projekt aktualisiert hat, sollte der Adminbereich entsprechend aussehen.



Den FrontLayoutHelper erweitern

So jetzt haben wir die Information. Doch die voreingestellte Klasse dmFrontLayoutHelper kann mit dieser Information nichts anfangen. Und aus diesem Grund benötigen wir einen eigenen Helper der die Information verarbeiten kann. In meinem Fall habe ich die Klasse unter app/front/lib/view/html/layout/myFrontLayoutHelper.php abgelegt. Die Klasse leitet in diesem Fall von der Klasse dmFrontLayoutHelper ab und überschreibt die Methode renderBodyTag wie folgt:

  public function renderBodyTag($options = array())
  {
    $options = dmString::toArray($options);

    if (($bodyId = dmArray::get($options, 'id', $this->page->getPageView()->getLayout()->get('body_id'))))
    {
      $options['id'] = $bodyId;
    }

    return parent::renderBodyTag($options);
  }

Den neuen FrontLayoutHelper bekannt machen

Zu guter Letzt muss dem Dependency-Injection-Container die neue Klasse bekannt gemacht werden. Dazu erstellen wir unter dem Pfad apps/front/config/dm/ die Datei service.yml und überschreiben den Wert für den Parameter layout_helper.class.

parameters:

  layout_helper.class:        myFrontLayoutHelper   # Responsible for rendering the front layout.

Das war es auch schon.

Tags für diesen Artikel: , ,

Alle Folien des symfony Camps 2008

Geschrieben von Dejan Spasic • Monday, 15. September 2008 • Kategorie: SymfonyKommentare (2)

symfonyIngo Busch hat auf seinem Blog Software Wahnsinn alle Folien vom symfony Camp 2008 aufgelistet.

Symfony-Camp 2008 (IV) - die Folien

Tags für diesen Artikel: ,

Dokumentation für sfFrom veröffentlicht

Geschrieben von Dejan Spasic • Wednesday, 18. June 2008 • Kategorie: SymfonyKommentare (0)

symfonyEs ist so weit, die lang ersehnte Dokumentation für das neue SubFramework sfForm von symfony ist jetzt veröffentlicht worden. Zumindest die wichtigsten Punkte. Weitere Kapitel werden noch folgen. Diese wären z.B.:

  • Chapter 5 - Advanced Forms
  • Chapter 6 - Nested Forms
  • Chapter 7 - Advanced Forms for Web Designers
  • Chapter 8 - Internationalisation and Localisation
  • Chapter 9 - Extending your Forms
  • Chapter 10 - Use with other frameworks
  • Appendix A - Bundled Widgets
  • Appendix B - Bundled Validators

Der Verweis zu der erfreulichen Nachricht symfony Forms in Action.

Tags für diesen Artikel: ,