Kategorien
PHP Zend Framework

ZF2 Zend Form Validierung: User Text-Eingaben

Um Text sicher zu Filtern kann man mit dem Zend Framwork 2 Validator und einem HTML-Filter wie HTML Purifier eine Validierung des Inhaltes durchführen:

Kategorien
PHP Zend Framework

ZF2 Zend Form Validierung: Email-Adressen

Mit Zend_Validator lässt sich eine sehr anspruchsvolle und sichere E-Mail Validierung durchführen, die man mit passenden Fehlermeldungen für den User bei Bedarf versehen kann:

    <?php

    use Zend\Form\Element;
    use Zend\InputFilter\InputProviderInterface;
    use Zend\Validator;

    class EmailElement extends Element implements InputProviderInterface
    {
        protected $attributes = array(
            'type' => 'email',
        );
        private  $wrongEmailMessage = 'Bitte geben Sie eine gültige E-Mail-Adresse an.';

        public function getInputSpecification()
        {
            return array(

                'name' => $this->getName(),
                'filters' => array(
                    array('name' => 'Zend\Filter\StringTrim'),
                ),
                'attributes' => array(
                    'type' => 'email'
                ),

                'validators' => array(
                    array(
                        'name' => 'NotEmpty',
                        'options' => array(
                            'messages' => array(
                                \Zend\Validator\NotEmpty::IS_EMPTY => $this->wrongEmailMessage
                            ),
                        ),
                    ),

                    array(
                        'name' => 'EmailAddress',
                        'options' => array(
                            'hostnameValidator' => null,
                            'messages' => array(
                                \Zend\Validator\EmailAddress::INVALID => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::INVALID_FORMAT => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::INVALID_HOSTNAME => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::CANNOT_DECODE_PUNYCODE  => $this->wrongEmailMessag,
                                \Zend\Validator\Hostname::INVALID  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::INVALID_DASH  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::INVALID_HOSTNAME  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::INVALID_HOSTNAME_SCHEMA  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::INVALID_LOCAL_NAME  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::INVALID_URI  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::IP_ADDRESS_NOT_ALLOWED  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::UNDECIPHERABLE_TLD  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::UNKNOWN_TLD  => $this->wrongEmailMessage,
                                \Zend\Validator\Hostname::LOCAL_NAME_NOT_ALLOWED  => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::INVALID_MX_RECORD => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::INVALID_SEGMENT => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::DOT_ATOM => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::QUOTED_STRING => $this->wrongEmailMessage,
                                \Zend\Validator\EmailAddress::INVALID_LOCAL_PART => $this->wrongEmailMessage,
                            )
                        )
                    )
                )
            );
        }
    }
Kategorien
PHP Zend Framework

Internationalisierung/Mehrsprachigkeit von PHP Projekten mit .po und .mo

Für ein mehrsprachiges PHP Projekt sollte man von Anfang an alle Wörter auslagern bzw. markieren, die in einer anderen Sprache übersetzt werden sollen. Dazu bietet sich die in PHP enthaltene Funktion gettext an:

<?php echo gettext("Einen schönen Tag noch"); ?>

oder der Alias (welcher nicht zu empfehlen ist, weil man nicht danach zu kann ordentlich)

<?php echo _("Einen schönen Tag noch"); ?>

Damit kann man zu übersetzenden Text markieren und später übersetzen lassen und dann dynamisch austauschen lassen , wenn auf der englischen Webseiten gesurft wird.

Wenn man sein Projekt mit gettext programmiert hat, kann man am Ende ganz einfach tabellenartige Dateien generieren aus dem Quellcode mit Poedit. Dort kann mann sehr übersichtlich die Übersetzung der Strings eintragen bis hin zu Pluralformen von Wörtern.

Kategorien
PHP Zend Framework

Zend APIs: einzelne Komponenten verwenden

Das Zend Framework enthält viele praktische Schnittstellen zu bekannten APIs:

  1. Google Base (Zend_Gdata)
  2. Open ID (Zend_OpenId)
  3. Zend_Service mit:
  • Zend_Service_Akismet
  • Zend_Service_Amazon
  • Zend_Service_Amazon_EC2
  • Zend_Service_Amazon_S3
  • Zend_Service_Audioscrobbler
  • Zend_Service_Delicious
  • Zend_Service_DeveloperGarden
  • Zend_Service_Ebay
  • Zend_Service_Ebay_Finding
  • Zend_Service_Flickr
  • Zend_Service_LiveDocx
  • Zend_Service_Nirvanix
  • Zend_Service_ReCaptcha
  • Zend_Service_ShortUrl
  • Zend_Service_Simpy
  • Zend_Service_SlideShare
  • Zend_Service_StrikeIron
  • Zend_Service_Technorati
  • Zend_Service_Twitter
  • Zend_Service_WindowsAzure
  • Zend_Service_Yahoo

Eine komplette Liste gibt es hier.

Solche APIs können folgender Maßen eingebunden werden ohne die ganze Webseite als Zend-Projekt programmieren zu müssen (am Bsp. von GBase: Google Base):

Kategorien
PHP Webdeveloper Tools Zend Framework

PHP Datenbank Backend generieren Scaffolding

Um schnell eine einfache Möglichkeit für Kunden zu haben, um auf die Datenbank zuzugreifen, kann man das praktische online Tool phpScaffold nutzen.

Damit lassen sich schnell Oberflächen generieren und customizen zum Ändern, Einfügen und Entfernen von Datensätzen einer Tabelle.

Für größere Projekte sollte man allerdings ein passendes Framework nutzen, welches Scaffolding unterstützt:

Bsp Ergebnis:

Kategorien
Android C C++ CodeIgniter Framework iPhone/iOS Java JavaScript Mobil MySQL PHP Webdeveloper Tools Zend Framework

Teil 1: Clean Code – Regeln für guten, sauberen Code

Sauberen und leicht verständlichen Code zu schreiben ist das höchste Ziel in einem guten IT-Projet. Vieles hängt davon ab:

  • Wartbarkeit
  • Einarbeitungszeit für andere Programmierer, versteht man schnell, was einzelne Funktionen erledigen
  • Robustheit bei Änderungen
  • Testbarkeit, fällt alles zusammen, bei kleinen Änderungen, können schnell stabile Updates bereitgestellt werden
  • Popularität bei anderen Programmierern z.B: bei Open Source Projekten, als negative Beispiel sei XT-Commerce genannt

Das sehr zu empfehlende Standardwerk zu dem Thema ist „Clean Code – Refactoring, Patterns, Testen und Techniken für sauberen Code“ von Robert C. Martin. In diesem Artikel werden Kapitel 1 bis 3 behandelt.

Aussagekräftige Namen

Der Namen einer Variable, Funktion oder Klasse sollte sofort erklären, warum Sie existiert, was sie tut und wie sie benutzt wird. Wenn eine Variable einen Kommentar benötigt, drückt Sie ihren Zweck nicht aus.

Bsp:

int d //Anzahl vergangener Tage
besser ist:
int daysSinceCreation;

Aussprechbare Namen verwenden

Keine Konstrukte mit unklaren Abkürzungen wie: int daSiCre anstatt von daysSinceCreation.

Suchbare Namen verwenden

Moderne IDEs machen das Suchen einfach, aber es nützt nichts, wenn man nach dem Buchstaben e einer Laufvariable suchen muss und von Ergebnissen überschwemmt wird.

Variablen Namen mit einem Buchstaben sind nur als lokale Variablen in kurzen Methoden zu verwenden.

Kategorien
Zend Framework

Zend kranuliertes Rechtesystem mit Zend_Acl und Zend_Auth

Für das Rechtesystem in meinem Tippspiel werden die Komponenten Zend_Auth und Zend_Acl im Zendframework verwendet. Zend_Auth ist dabei für die Authentifizierung registrierter Nutzer zuständig und Zend_Acl für Verteilung und das setzen der Rechte. Es wurden drei Rollen angelegt: Guest, Member und Administrator.

Kategorien
Zend Framework

Zend Test mit PhpUnit

Zum Testen wurde PHPUnit verwendet als Standard-Testing-Tool für PHP und in Netbeans intergriert.

Dazu wurde eine Bootstrap Datei angelegt, in der die Applikationsvariablen geladen werden (IndexControllerTest.php):

class IndexControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{
    public function setUp()
    {
        $this->bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
        parent::setUp();
    }
}

Ein Test kann dan so aussehen (Test Files/application/controllers/IndexControllerTest.php):

require_once '/../../TestConfiguration.php';
require_once '/../../../application/models/Players.php';

class PlayersTest extends PhpUnit_Framework_TestCase{
    public function setUp()
    {
        TestConfiguration::setupDatabase();
    }
    public function testFetchAll(){
        $TippspielObjekt = new Players();
        $TippspielAnzahl = $TippspielObjekt->fetchAll();
        $this->assertGreaterThan(10, $TippspielAnzahl->count());        
    }
    public function testLatest(){
        $TippspielObjekt = new Players();
        $TippspielAnzahl = $TippspielObjekt->fetchLatest(1);
        $this->assertSame(1,$TippspielAnzahl->count());
    }
}
Kategorien
PHP Zend Framework

Design Patterns im Zend Framework

Für einen Uni Vortrag habe ich mich mit den zahlreichen Design Patterns im Zend Framework beschäftigt. Folgende Themen werden beleuchtet mit Code- Beispielen:

Gliederung:

1. MVC
2. Front-Controller
3. Singleton
4. Row-Data-Gateway und Table-Data-Gateway
5. Registry

Download:

zend_framework_design_patterns