Blog

  • PHP 8: Attribute – Erklärung und Beispiel

    In diesem Artikel möchte ich euch anhand eines kleinen Beispiels erklären wie ihr mit PHP 8 eure eigenen Attribute erstellen und nutzen könnt. Wir werden ein Attribut namens Route erstellen und es dann in einem Controller zur Definition der URL verwenden.

    Falls du noch nichts von Attributen gehört hast: Sie dienen dazu die bisherigen Annotations zu ersetzen und sind mindestens genauso mächtig.

    (mehr …)
  • Was ist Cross-Site-Request-Forgery (CSRF)?

    Cross-Site-Request-Forgery ist ein ziemlicher Zungenbrecher, aber dennoch ein wichtiges Thema, wenn es um Sicherheit im Web geht. Wie zuvor beim Cross-Site-Scripting (XSS) möchte ich euch einen Einblick geben, was das Problem genau ist und was wir dagegen tun können. (mehr …)

  • Was ist Cross-Site-Scripting (XSS)?

    Heute aus der Reihe Sicherheitsrisiken einer Webanwendung: Cross-Site-Scripting (XSS). Was ist das? Was ist das Risiko? Was können wir als Entwickler dagegen tun?

    (mehr …)

  • Checkliste Serverumzug

    In unserem Dasein als Entwickler kommt es immer mal wieder vor, dass wir ein Projekt (eine Domain) auf neue Hardware umziehen müssen. Solange dass beim selben Provider erfolgt ist es meist einfach, aber was wenn ein großer Umzug ansteht?

    In diesem Beitrag möchte ich euch eine Checkliste mit best-practices und Tipps für einen möglichst reibungslosen – sprich mit wenig Downtime – Wechsel geben.
    (mehr …)

  • Session Management – Datei basiert, mit Memcache und mit JSON-Token

    Wir müssen uns heute in PHP glücklicherweise kaum noch mit Session-Verwaltung beschäftigen, da praktisch alle Frameworks dies auf die ein oder andere Art abstrahieren und in eine hübsche API verpacken.

    In diesem Artikel soll es trotzdem um die Grundlagen und Möglichkeiten einer eigenen Session-Verwaltung gehen. Gerade JSON-Tokens bieten eine schöne Möglichkeit Sessions zu realisieren ohne tatsächlich Daten auf dem Server zu speichern. (mehr …)

  • Test Driven Development (TDD) – Was steckt wirklich dahinter?

    Tests sind sinnvoll! Das hat jeder schon mal gehört und dann halt auch mal paar Tests geschrieben. War das dann schon „Test-getriebene Entwicklung“ (TDD)? Nein! Also was steckt dann tatsächlich dahinter? Wir werden das im Laufe dieses Artikels anhand des Katas zur Primfaktorenzerlegung durchspielen. (mehr …)

  • Symfony 3 – Hinzufügen dynamischer Routen

    Heute habe ich mich mit dem Thema dynamische Routen (zum Beispiel aus einer Datenbank) in Symfony 3 beschäftigt. Dabei ist mir aufgefallen, dass derzeit verfügbare Bundles noch nicht mit Symfony 3.0 kompatibel sind – ich musste also selbst ran. (mehr …)

  • Symfony 3 – Benutzerdefinierte Optionen in Formularen

    In Symfony gibt es bekanntlich den sehr mächtigen FormBuilder. Manchmal genügt ein

    $form = $this->createFormBuilder($user)
    	->add('password', RepeatedType::class, ['type' => PasswordType::class])
    	->add('send', SubmitType::class)
    	->getForm();

    und wir haben ein Formular für eine Passwortänderung.

    Spannend wird es aber natürlich erst, wenn wir unseren eigenen FormType definieren und damit ein komplexeres Formular aufbauen. In diesem Artikel geht es dabei um die Problematik einer benutzerdefinierten Option. (mehr …)

  • Sinn und Zweck mehrspaltiger Indizes in MySQL

    Wann immer wir neue Tabellen in einer MySQL Datenbank anlegen, stellt sich die Frage, welche Spalten indiziert werden müssen. Für gewöhnlich genügt ein einspaltiger Index. In manchen Fällen kann aber mit einem mehrspaltigen Index die Performance verbessert werden. Welche Vor- und Nachteile solche Indizes mit sich bringen, werde ich euch hier erläutern. (mehr …)

  • Was ist der Unterschied zwischen Active Record und Data Mapper?

    Früher oder später geht es in jeder Webapplikation darum Daten zu speichern. In einer nach dem MVC-Prinzip orientierten Anwendung wird die ein oder andere Form eines ORM zum Einsatz kommen. Solche ORM (z. B. Doctrine, Eloquent) folgen entweder dem Paradigma des Active Record oder das dem Data Mapper. In diesem Artikel wird es um die Unterschiede dieser beiden gehen. (mehr …)