Das CakePHP Kern-Team hat am 19. September 2015 die CakePHP 3.1.0 Stable Version auf GitHub veröffentlicht. Dieses Release ist die API Stable  Version der 3.1 Branch, welche diverse neue Features für die 3er Version des ausnahme Frameworks beinhaltet.

Neu in 3.1.0

  1. ORM ( Object-relational mapping ) Erweiterungen
    1. Der große Part in 3.1 ist die Optimierung des schon großartigen ORM
  2. Mailers
  3. Zusätzliche Template Variablen in Vorlagen
  4. Shell Helpers
  5. Neugestaltete Default Application Styles

Lazy Eager Loading

Ab jetzt können Assoziazionen per Lazily Eager Load nachgeladen werden. Dieses Feature ermöglicht es dir Model Assoziazionen nach dem primären Find Statement in das Resultat, die Entität oder eine Kollektion von Entitäten zu laden.

<?php
public function index($type = 'popular')
{
    $products = $this->Products->find($type)->all();
    // Later on after some logic has run.
    // We can load additional associations.
    $withProductGroups = $this->Products->loadInto($products, ['ProductGroups']);
}

Zusätzliche Filtermethoden

Du hast schon vielleicht die Methode matching() auf einem Query Objekt angewandt. Seit 3.1 kannst du auch die neue Methode notMatching() einsetzen um negierte passende Abfragen zu generieren.

<?php
public function index($type = 'popular')
{
    // Find products with no reviews.
    $query = $this->Products->find($type)
    ->notMatching('Reviews');
}

Du kannst auch die leftJoinWith() und innerJoinWith() Methoden anwenden, um Verbindungen zu erschaffen, ohne die Spalten der Assoziation laden zu müssen. Das macht die Filterung der Assoziationen einfach.

<?php
public function index_filter()
{
    $query = $this->Products->find()
    ->innerJoinWith('Reviews')
    ->where(['Reviews.promoted' => true]);
}

Mailers

Mailers ermöglichen dir die Erstellung von applikationsweit wiederverwendbaren E-Mails. Sie können auch eingesetzt werden, um mehrere E-Mail-Konfigurationen an einer Position platzieren zu können. Dies hilft, deinen Code nach dem DRY Prinzip sauber zu halten und die E-Mail Konfigurationen nicht systemweit zu verstreuen. Sehe die komplette Mailer Dokumentation.

Zusätzliche Template Variablen in Vorlagen

Du kannst nun zusätzliche Template Platzhalter in den Vorlagen deiner Anwendung hinzufügen und dann diese Platzhalter beim Erstellen von Eingaben befüllen.

<?php
// Add a template with the help placeholder.
$this->Form->templates([
    'inputContainer' => '<div class="input {{type}}{{required}}">{{content}} <span class="help">{{help}}</span></div>'
]);

// Generate an input and populate the help variable
echo $this->Form->input('password', [
    'templateVars' => ['help' => 'At least 8 characters long.']
]);

Shell Helpers

Shell Helpers ermöglichen dir einfaches Verpacken vom komplexen Ausgangsgenerierungscode. Auf Shell Helper kann von jeder Shell oder Task zugegriffen und diese verwendet werden.

<?php
// Output some data as a table.
$this->helper('table')->output($data);

// Get a helper from a plugin.
$this->helper('Plugin.HelperName')->output($data);

Du kannst auch Helper instanziieren und alle öffentlichen Methoden auf Ihnen ausführen.

<?php
// Get and use the Progress Helper.
$progress = $this->helper('Progress');
$progress->increment(10);
$progress->draw();

CakePHP bietet somit einen Fortschritt und Tabellen Helper, die eingesetzt werden können, um deine CLI-Tools besser aussehen zu lassen.

Neugestaltete Default Application Styles

Das in der Anwendung verwendete Skelett Styling wurde gestrafft und bietet eine verbesserte Darstellung auf kleineren Geräten. Neben der sauberen Optik, wurden bake Templates aktualisiert, um saubereres Markup erzeugen zu können.

Wichtige Änderungen seit 3.0

Während keiner der folgenden Änderungen Methodensignaturen modifiziert, ist das Verhalten der spezifischen Methoden etwas anders als in der Vergangenheit.

  1. FlashComponent stapelt nun Flash Nachrichten die mit der set() oder __call() Methode erstellt wurden. Das bedeutet, dass sich die Struktur der gespeicherten Flash-Mitteilungen in der Session geändert hat.
  2. Neue Konfigurationsoption Speicher wurde hinzugefügt. Es enthält die Storage Klasse, welche von der AuthComponent verwendet wird, um Benutzerdaten zu speichern. Standardmäßig wird SessionStorage verwendet.