CakePHP 2.x – HtmlHelper Link Anker setzen

Um bei CakePHP 2.x einen Anker ans Ende zu setzen kann man diesen mit dem Parameter # (Raute) setzen.

Bsp.
Parameter = #,
Wert = Ziel des Ankers z.B. comment-1 (die Raute setzt CakePHP selber)

echo $this->Html->link('Click Me', array('controller'=>'c', 'action'=>'a', '#' => 'destination'));

Quelle:
http://ask.cakephp.org/questions/view/html_link_helper_with_internal_anchor_and_parameter

Klassisches Update mit Git..?

Heute möchte ich der Frage nach gehen, wie man ein klassisches Update seiner lokalen Version durchführt. Dazu habe ich einen sehr schönen Blogbeitrag von ikarius entdeckt. Ja, ich weiß er löst mein Problem nicht. Aber er dient als Ansporn sich auf der richtigen Spur zu befinden… :)

Zurück zu meinem Problem. Faktenlage:
Entwickle aktuell unter der CakePHP-Framework Version 2.1.0. Mittlerweile ist aber die Version 2.1.2 aktuell. Mein Betriebssystem ist Ubuntu 12.04.

Meine Vorgehensweise:

  1. Terminal öffnen
  2. Ins Verzeichnis vons CakePHP-Framework wechseln
  3. Befehl git pull eingeben

Nach Punkt 3 bekomme ich folgende Fehlermeldung:

error: Your local changes to the following files would be overwritten by merge:
app/Config/bootstrap.php
app/Config/core.php
app/Config/routes.php
app/Controller/AppController.php
app/Controller/PagesController.php
app/View/Layouts/default.ctp
app/View/Pages/home.ctp
Please, commit your changes or stash them before you can merge.
Aborting

Mit dem Befehl git diff kann man sich die Differenzen seiner Version zu der Online-Version näher anschauen. Oder über git log kann man den bisherigen Verlauf betrachten.

Nach Recherche bin ich auf folgenden Eintrag gestossen http://longair.net/blog/2009/04/16/git-fetch-and-merge/. Man soll nicht mit dem Befehl git pull arbeiten, sondern zuerst mit git fetch die Änderungen holen und anschließend über git merge seine Version mit der aktualisierten CakePHP Version zusammenführen.

Leider habe ich zu wenig Erfahrung im Umgang mit Git. Daher habe ich folgenden Fehler gemacht
git stash
git pull origin

Indem ich mit git stash meine Änderungen versteckt habe und anschließend das Update durchgeführt habe. Das Update lief zwar erfolgreich ohne Fehlermeldung durch, aber leider wurden die Dateien von der obrigen Fehlermeldung überschrieben. Diese habe ich manuell aus meinem letzten Backup wieder hergestellt.

Mit dem Umgang mit Git muss ich noch viel lernen. Wenn jemand Rat weiß, würde ich mich über eine E-Mail oder Kommentar sehr freuen, vielen Dank!

Weiterführende Links:
http://rogerdudler.github.com/git-guide/index.de.html
http://de.gitready.com/
http://ls11-www.cs.tu-dortmund.de/people/martin/git/erste-schritte-mit-git.html
http://ccc.zerties.org/index.php/Git_HowTo
http://wiki.ubuntuusers.de/Git

Datensicherung Grundlagen

Man unterscheidet bei der Datensicherung nach

Vollsicherung
Sicherung aller Daten
Differentielle Sicherung
Sicherung aller Daten, welche seit der letzten Vollsicherung geändert oder neu angelegt wurden sind
Inkrementelle Sicherung
Sicherung aller Daten, welche seit der letzten Vollsicherung oder inkrementellen Sicherung geändert oder neu angelegt wurden sind
Images
Sicherung einer Festplatte oder Partition
RAID-1
Festplattenverbund von 2 Festplatten, redundante Daten
Daten doppelt vorhanden
RAID-1 ersetzt die Datensicherung nicht

Strategien

  1. Was und woher: Was muss ich sichern und wo liegen diese Daten?
  2. Wann: Wie oft soll eine Datensicherung vollzogen werden?
  3. Wohin: Worauf soll ich meine Daten sichern?

Sehr schöner Artikel: http://wiki.ubuntuusers.de/Datensicherung

CakePHP Best Practices: Elemente

Häufig verwendete Views werden im Elements-Ordner bei CakePHP abgelegt, damit mehrere andere Views darauf zurückgreifen können.

Beispiel

Ein gutes Beispiel ist, dass man die Benutzerregistrierung auf der Startseite haben möchte.

Lösungsansatz

Ordnerstruktur im View:

  • Elements
    • add-user.ctp
  • Pages
    • home.ctp
  • Users
    • add.ctp
    • edit.ctp
    • index.ctp
    • view.ctp

Die Views Users/add.ctp und Pages/home.ctp verweisen einfach auf das Element add-user.ctp

Dateien add.ctp und home.ctp sehen in etwa so aus:

echo $this->element('add-user');

CakePHP Best Practices: Rekursion

Um bei der Datenabfrage sicherzustellen, dass nicht zuviele unnötige Daten mitgeschleppt werden setzt man dazu die Eigenschaft Rekursion ein.

Problem

Die eigene CakePHP-Anwendung arbeitet beim Seitenaufruf sehr langsam. Jetzt sind Optimierungsquellen gefragt. Eine Performance Optimierung bietet die Eigenschaft Rekursion in CakePHP an. Da meist bei verknüpften Tabellen zuviele Daten abgefragt werden.

Lösungswege

Ein Lösungsweg ist die Rekursionstiefe anzugeben, welche man benötigt. Dies bedeutet man legt im Controller fest wieweit die Verknüpfung von Daten des Controller reichen soll. Kurz wieviele Joins auf andere Tabellen stattfinden.

Rekursionstiefen

-1
Keine Rekursion (ohne Join)
0
Direkt verknüpfte Daten des Models
1
Verknüpfte Daten des direkt verknüpften Models
2
Vollständige Rekursion (alle vorhanden Verknüpfungen)

Je höher die Rekursionstiefe, desto langsamer die Anwendung.

Quellen und Inspiration

CakePHP Cookbook Eintrag Rekursion und inspiriert durch den Blogpost Rekursive Suche mit find() in CakePHP

Hintergrundwissen

Rekursion
Rekursion bezeichnet den Wiederaufruf eines wiederkehrendes Problems, deren Lösung in den gleichen Arbeitsschritten wie des vorherigen Aufrufs liegt. Eine Funktion die sich selbst solange Aufruft bis ein Problem abgearbeitet ist.

Wikipedia Eintrag zur Rekursion

Berechnung von Dateigrößen von Bildern

Beispiel:

Gegeben:

  • PNG-Screenshot mit der Auflösung 1366×768 Pixel
  • 2-Bit Farbtiefe

Formeln:

  • Byte = Farbtiefe / 8 Bit (= 1 Byte)
  • Größe in Bit = Bildbreite x Bildhöhe x Bit
  • 1 Kilobyte (kB) = 210 Byte (1.024 Byte)

Rechnungen:

  • 2-Bit Farbtiefe / 8 Bit = 0,25 Byte
  • 1366 Bildbreite x 768 Bildhöhe x 0,25 Byte = 262.272 Byte
  • 262.272 Byte / 1.024 Byte = 256,125 Kilobyte (kB)

Quellen:

CakePHP Best Practices: Fettes Model und schlanker Controller

Ein Anfängerfehler ist meist, dass man die Logik zu sehr in den Controller legt. Dabei entfiehlt es sich, den Controller schlank zu halten und Funktionalitäten in das Model zu verlagern. Dies hat den großen Vorteil, dass der Controller übersichtlich bleibt und der Controller seine angedachten Aufgaben erfüllen kann.

Aufgaben des Controllers

  • Anfragen entgegennehmen
  • Anfragen koordinieren
  • Antwort für den Besucher aufbereiten

Dahingegen ist das Model das Herzstück der Anwendung in der die eigentliche Funktionalität abläuft.

Aufgaben des Models

  • Validierung der Daten
  • Auslesen der Daten
  • Speicherung der Daten

Eine der häufigsten Funktionalitäten, welche man zum Auslesen der Daten im Model benutzt ist sicherlich die Find-Methode. Die Referenz zur Methode findet man unter http://api20.cakephp.org/class/model#method-Modelfind

Inspiration

Inspiration zum Verfassen dieses Artikels war ein Beitrag von Jeff Pollard auf seinem Blog bitfluxx: http://bitfluxx.com/2008/01/23/cakephp-best-practices-fat-models-and-skinny-controllers.html

Arten des Prototypings

Rapid Prototyping
Sammlung von Erfahrungen
Evolutionäres Prototyping
Schrittweise Verbesserung von Prototypen
Exploratives Prototyping
Konzentration auf die Funktionalität des Anwendungssystem
Experimentelles Prototyping
Suche nach Möglichkeiten zur Realisierung
Horizontales Prototyping
Entwicklung eines Prototyps für zunächst nur eine Systemschicht
Vertikales Prototyping
Parallele Entwicklung von Prototypen für mehrere Systemschichten

CakePHP sicherstellen das deutsche Umlaute korrekt in der Datenbank gespeichert werden

Damit die Umlaute korrekt in die Datenbank gespeichert werden ist es wichtig in database.php UTF-8 anzugeben z.B.

public $default = array(
'datasource' => 'Database/Mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'mysql_benutzer',
'password' => 'dein_passwort',
'database' => 'datenbank',
'prefix' => '',
'encoding' => 'utf8',
);