Sep 03

Damit das Default-Layout bei einem AJAX-basierten Aufruf nicht automatisch eingebunden wird, reicht es auch, die ‘RequestHandler’ Komponente des Frameworks dem Controller (bspw. auch dem PagesController) hinzuzufügen:

var $components = array('RequestHandler');
Tagged mit:
Sep 03

Werden Links oder Formulare mittels des AJAX-Helpers erstellt, um die Daten ansynchron zu laden und in einem DIV-Bereich anzuzeigen, wird in diesem DIV ggf. das Default-Layout genutzt. So kommt es dann zum Effekt der “Seite in der Seite”. Um das zu vermeiden, muss das Layout bspw. in der Methode (Action) entsprechend gesetzt werden. Möglich ist ein eigenes AJAX-Layout zu entwerfen oder aber gar kein Layout zu nutzen:

function TuDingeUndZeigeSieDannImDivAn () {
   $this->layout = '';
   $ergebnis = $this->tuWas();
   $this->set('view',$ergebnis);
}
Tagged mit:
Aug 28

In Ergänzung zu meinem Blogpost “CakePHP: Monatsnamen auf Deutsch” kann man die erstelle ‘locale’ Datei natürlich auch nutzen, um die Monatsnamen in Views auf Deutsch anzeigen zu lassen.

Dazu muss die ‘__()’ – Funktion, wie bei der Internationalisierung üblich, genutzt werden. Letzendlich sieht das Ganze dann so aus:


__(date('F',strtotime($controllerKlasse['Klasse']['datum'])),true)

wobei date(‘F’) den ausgeschriebenen Monatsnamen ausgibt. (siehe dazu auch die date() Dokumentation auf php.net)

Tagged mit:
Aug 15

Falls mir jemand den Fehler erklären möchte, ich freue mich über jede Antwort!
Die Lösung zumindest liefert das einbinden des ‘ConnectionsManagers‘ in den Controller, in dem auch eine sanitize-Methode zum Einsatz kommt.

App::Import('ConnectionManager');

Diese Zeile muss vor Beginn der Deklaration der Klasse stehen, ganz genauso wie auch der Import der Sanitize-Klasse.
Ich habe keine Ahnung, wieso CakePHP (1.2.6) den ConnectionManager nicht direkt im Core ordentlich mit eingebunden hat.

Also Feuer frei für Kommentare!!!

Tagged mit:
Aug 15

Wer in das Verlangen kommt, die Email-Component von CakePHP nutzen zu wollen, sollte sich stets eines Schusselfehlers bewußt sein. Die Email-Component bindet man wie gewöhnlich über

$components = array('Email');

in den jeweiligen Controller ein. Wer jedoch bei ‘$components’ das ’s’ vergisst (Schusselfehler) erhält die im Titel dargestellte Fehlermeldung.

Tagged mit:
Aug 14

Vermutlich kommt das Problem seltener vor, aber nichts destotrotz verdeutlicht es ganz anschaulich die Funktionsweise der ‘redirect‘-Methode.
Angenommen man befindet sich innerhalb eines Controllers in einem Plugin und möchte nach der Ausführung einer Methode auf eine statische Seite umleiten (redirecten), dann übergibt man dieser Methode mehrere Parameter in der folgenden Form:

$this->redirect(array('controller' => 'pages', 'action'=>'display','ueberuns/kontakt', 'plugin' => null));

Der ‘action‘-Schlüssel muss ‘display‘ als Wert haben, da nur diese Methode im pages_controller existiert. Damit der pages_controller weiß, welche statische Seite aufgerufen werden soll, wird als weiterer Parameter die View übergeben (in diesem Fall die View ‘kontakt‘ im Ordner ‘ueberuns‘. Damit das Ganze nicht innerhalb des momentanen Plugins stattfindet, setzen wir den ‘plugin‘-Schlüssel noch null und schon funktioniert der Redirect.

Tagged mit:
Aug 14

Einen funktionierenden Breadcrumb-Helper gibt es in der CakePHP bakery. Kann diesen Helper nur empfehlen. Er funktioniert wunderbar. Eine Ausnahme: Die Auto-Analyse (dritter Parameter = ‘auto’) scheint in statischen Seiten (pages_controller) ab der dritten Ebene nicht zu funktionieren. Ist aber nicht weiter schlimm, denn man kann den Parameter ja manuell setzen.

Hier ist der Link!

Tagged mit:
Aug 01

Um den letzten erfolgreichen Login eines Nutzers in einem Feld ‘lastlogin‘ zu speichern, muss in der login()-Methode des UsersController folgender Code eingefügt werden:

if ($this->Auth->user()) {
 $this->User->id = $this->Auth->user('id');
 $this->User->saveField('lastlogin', date("Y-m-d H:i:s"));
 $this->redirect('/controller/action');
}

Damit das ganze auch aufgerufen wird, muss im app_controller noch das autoRedirect ausgestellt werden. Dies erklärt auch die redirect()-Methode in der oben dargestellten login()-Methode.

Im app_controller muss also noch folgendes stehen (oder im beforeFilter() des UsersController)

$this->Auth->autoRedirect = false;
Tagged mit:
Jul 31

Leider funktioniert die Angabe von

setlocale(LC_TIME,"de_DE"); #oder
setlocale(LC_TIME,"deu"); #oder
setlocale(LC_TIME,"ge");

in der ‘bootstrap.php’ nicht, um deutsche Monatsnamen in Formularfeldern mit Datumsangaben zu erhalten.
Daher der Umweg über die Lokalisierungsdatei:

Verzeichnis “deu” im Ordner “app/locale” anlegen.
Verzeichnis “LC_MESSAGES” im grade erstellen “deu” Ordner anlegen.
Datei “default.po” in diesem Ordner anlegen.

In die ‘default.po’ nun die Übersetzungen in der Form

msgid "January"
msgstr "Januar"

msgid "February"
msgstr "Februar"

...

schreiben. Fertig!

Tagged mit:
Jul 30

Normalerweise wird durch die ‘loginAction‘-Variable der AuthComponent die Action definiert, die bei dem Versuch eine geschützte Seite aufzurufen, angezeigt werden soll.

Wenn ein Plugin in eine CakePHP-Anwendung eingebunden und ebenfalls durch die AuthComponent geschützt werden soll, dann wird der Nutzer auf eine Seite in der Form ‘http://www.domain.de/plugin_name/users/login‘ weitergeleitet. Ist letztendlich auch logisch, denn CakePHP geht davon aus, dass der UsersController Teil des Plugins ist.

Um dies zu umgehen und den “richtigen” UsersController der Hauptanwendung aufzurufen, muss der ‘loginAction‘ der AuthComponent eine weitere Variable, nämlich ‘plugin‘, übergeben werden. D.h. normalerweise in der beforeFilter()-Methode des UsersController oder des AppController muss der Aufruf folgendermaßen lauten:

 $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login', 'plugin' => null);

Anschließend nutzt CakePHP den UserController als globalen UserController.

PS: Eine ähnliche Problematik tritt bei

$html->link();

usw. auf. Auch hier muss der Parameter ‘plugin‘ übergeben werden.

Tagged mit:
Jul 20

Nach der Umstellung auf CakePHP 1.3 kam bei mir der Fehler “Undefined variable: session” im Layout.

Warum auch immer muss man nun den Session-Helper manuell im app_controller hinzufügen.

Tagged mit:
Jul 04

Das YAML-Framework ermöglicht browserübergreifendes CSS Layout. Die entsprechenden IE Einschränkungen werden, wie so üblich, mit Kommentaren und Bedingungen realisiert. Zu beachten ist, dass die HTML-Kommentare der korrekten HTML-Konvention entsprechen, da sonst Fehler auftreten, wie z.B.

  • Anzeige von <!–[endif]–> im Browserfenster (geringeres Problem)
  • Javascript-Fehler bei CakePHP in Verbindung mit den AJAX-Helpern, Scriptaculous und Protoype. (größeres Problem)

Also immer schön an die Webstandards halten ;-)

Tagged mit:
Mai 09

…die man als Entwickler kennen sollte:

9 PHP-Functions you need to know

Tagged mit:
Mai 09

Wer plant mit CakePHP eine soziale Netzwerkfunktion zu implementieren, muss ein paar kleine Tricks beachten.
Wir gehen davon aus, dass eine “users”-Tabelle existiert, in der alle Nutzer gespeichert sind. Nun legen wir eine Tabelle an, die sich “users_users” nennt mit den Spalten “id”, “user_id”, “friend_id” und weiteren die Relation beschreibenen Spalten, bpsw. “approved”.

Im Model “user” muss nun die HABTM-Relation eingetragen werden:

var $hasAndBelongsToMany = array(
        'Friend' => array (
            'className' => 'User',
            'join_table' => 'users_users',
            'foreignKey' => 'user_id',
            'associationForeignKey' => 'friend_id'
        )
    );

Im Controller “users_controller” muss in der entsprechenden Methode die durch ein Formular übergebenen Daten mittels des folgenden Befehls speichern:

$this->User->UsersUser->save($this->data);

Dafür müssen natürlich die Daten in $this->data in der richtigen Form vorliegen, so dass das Formular richtig gestaltet sein muss. Wichtig ist, dass bei der Formularerzeugung auf Bezug auf “UsersUser” genommen wird, so dass das Array in $this->data auch data['UsersUser'][..] enthält:

echo $form->create('UsersUser', array('url' => array('controller' => 'Users', 'action' => 'tippgemeinschaft')));

Über die Option “url” übergibt man noch den richtigen Controller, da sonst CakePHP versuchen würde, den Controller “users_users_controller” zu laden.

Tagged mit:
Mai 09

Um das abgespeicherte “datetime”-Feld bspw. bei einer User-Tabelle in einer View in das deutsche Format zu bringen, genügt die folgende Zeile (vorausgesetzt, das “data”-Array ist entsprechend vorhanden:


echo date('d.m.Y',strtotime($this->data['User']['created']));
Tagged mit:
Apr 23

Statische Seiten in CakePHP werden über den Pages_Controller eingebunden. Möchte man diese frei zugänglich machen (d.h. auch erreichbar, obwohl die Auth-Komponente im Einsatz ist), dann muss der Auth-Variablen “allow” die “display”-Action des Pages_Controller übergeben werden.

$this->Auth->allow('display');
Tagged mit:
Apr 22

Bin aus dem CakePHP-Kochbuch nicht ganz schlau geworden, deswegen musste ich es selbst ausprobieren. Hier also der Code, wenn man bestimmte Spalten aufaddieren möchte (SUM) und gleichzeitig eine Bedingung stellt:

$conditions = array('user_id =" => $user_id);
$this->find('first',array('conditions' => $conditions, 'fields'=>array('Model.feld','SUM(Model.feld) as NeuesFeld'))));
Tagged mit:
Apr 22

Ich hatte das Problem, dass plötzlich diese Aussage von CakePHP kam und ich zuerst nicht wußte, woran es lag. Lustigerweise trat das Problem an ganz unterschiedlichen Stellen auf. Hier sind Lösungsmöglichkeiten:

  • Datenbankverbindung überprüfen
  • Cache leeren (app->tmp->cache)
  • View erstellen

Vor Allem bei dem letzten Punkt trat bei mir starke Verwunderung auf, da normalerweise ein “MissingView”-Error geworfen wird. Bei mir fehlte tatsächlich die View für die aufgerufene Action. Danach lief CakePHP wieder einwandfrei.

Der im Titel genannte Error tritt auf, wenn der Debugmodus auf 0 gestellt ist – also im Produktivbetrieb. Im Entwicklungsbetrieb erscheint der “MissingView”-Error.

Tagged mit:
Apr 18

Nutzt man die AJAX-Komponente des CakePHP-Frameworks, dann wird man unweigerlich (vermutlich) auch einmal in den Genuß kommen wollen, den inplaceeditor auszuprobieren:

echo $ajax->editor('DOM_id',$action,$options);

wobei $actions und $options jeweils ein Array mit den entsprechenden Schlüssel/Wert-Paaren sind.

Im $actions-Array wird auch die Methode des Controllers festgelegt, die bei per ansychronem Aufruf ausgeführt werden soll. In dem Controller, stehen dann die veränderten Werte in dem “params”-Array zur Verfügung:

$this->params['forms']['value'] # enthält den veränderten Wert des AJAX inplaceeditors
Tagged mit:
Apr 11

Nichts wildes, im Kochbuch von CakePHP auch leicht zu finden, dennoch hin und wieder gern gebraucht: Mittels find()-Methode des Models nur bestimmte Tabellenfelder aus der Datenbank holen. Simpel:

$this->Model->find('all', array('fields' => array('Model.feldname'), 'recursive' => -1));

Das “recursive => -1″ sorgt dafür, dass eventuelle Datenmodellabhängigkeiten nicht berücksichtigt werden.

Tagged mit:
Apr 05

Sobald ein Nutzer eingeloggt ist (und voraussgesetzt man hat die Nutzerverwaltung mit der Auth-Komponente implementiert) kann man auf die Daten ganz bequem in jedem Controller (in der die Auth-Komponente geladen wird) zugreifen:

$this->Auth->user('tabellenfeld');
Tagged mit:
Mrz 28

Ähnlich wie in Windows muss die Console von CakePHP in den PATH mit aufgenommen werden. Dazu

1. Terminal öffnen

2. die Datei “.profile” bspw. mit nano öffnen: “nano .profile”

3. die Zeile “export PATH=$PATH:/Applications/MAMP/htdocs/cakekphp/cake/console” eingeben (wobei der Pfad natürlich von der jeweiligen Installation von CakekPHP abhängt)

4. Datei speichern mit CRTL + O

5. nano beenden mit CRTL + X

6. neue Session im Terminal starten: Entweder Terminal beenden und neustarten oder “. ./.profile” eingeben.

7. “cake” eingeben und schauen, ob der CakePHP Gruß auf der Konsole erscheint.

Vorher sollte man noch überprüfen ob PHP ebenfalls im PATH bekannt ist. Dies kann man über den Befehl “php -v” ganz einfach testen.

Tagged mit:
Mrz 23

Um einfach zwischen lokaler Entwicklungsumgebung und einer Produktivumgebung wechseln zu können, kann in der Konstruktor-Methode der Klasse DATABASE_CONFIG ein einfaches if-Statement helfen. Eine kurze Beschreibung inklusive Beispiel gibt es in der Bakery von CakePHP.

Bei Mac OS X wird (anscheinend) schon IPv6 verwendet, so dass localhost nicht unter “127.0.0.1” zu erreichen ist, sondern unter “::1“. Dies sollte man bedenken, falls man die oben vorgestellte Lösung übernehmen möchte.

Tagged mit:
Mrz 22

Die Entwicklungsumgebung Eclipse PDT (für PHP) bietet eine Autovervollständigung während des Programmierens an. Standardmäßig (zumindest bei der Mac-Version) ist die automatische Vervollständigung nicht eingeschaltet, sondern der Programmierer muss “Strg+Leertaste” drücken, um die möglichen Variablen angezeigt zu bekommen.

Da das mitunter lästig ist, kann man auch die vollautomatische Vervollständigung einstellen. Einfach unter “Einstellungen => PHP => Editor => Code Assist” den Haken bei “Enable auto activation” setzen. Optional kann noch die Zeitverzögerung eingestellt werden.

Tagged mit:
Feb 21

Mit der “inputs()”-Methode (man beachte das “s”) können gleich mehrere Formularfelder erstellt werden. Mit der üblichen Schreibweise kann dann auch ein “legend”-Tag erstellt werden:

echo $form->inputs(array('legend' => 'Login', 'username', 'password'));
Tagged mit:
Feb 21

Um beispielsweise den “Login”-Link in einen “Logout”-Link wechseln zu lassen, sobald der Nutzer eingeloggt ist, braucht man von der Auth-Komponente irgendeine Rückmeldung über den Status. Eine Methode existiert dafür per se nicht. Die Methode

Auth->user()

ist jedoch eigentlich eine Wrapper-Methode für die Session

Auth.User

Daher kann man den Weg über die Session gehen und in Controllern mit der Session-Component und den Views (und damit auch im Layout – falls notwendig) mit dem Session-Helper arbeiten:

In Controllern sieht die Überprüfung daher folgendermaßen aus. Ist der Nutzer eingeloggt, liefert die Methode true

$this->Session->check('Auth.User.id');

In Views muss es so gehandhabt werden:

$session->check('Auth.User.id');
Tagged mit:
Feb 02

Die aktuelle URL kann man in CakePHP über mindestens zwei Wege bekommen.

1. Mit Hilfe der Router-Klasse:

Router::url("", false);

Der zweite boolsche Parameter gibt an, ob die URL relative (false) oder absolut (true) zurückgeliefert werden soll.

2. In den Views kann mittels

$this->params;

auf ein Array zurückgegriffen werden, welches ebenfalls Angaben über die URI enthält, hier beispielsweise dargestellt:

array(8) {
["pass"]=>  array(1) {[0]=>  string(7) "anfahrt" }
["named"]=>  array(0) { }
["plugin"]=>  NULL
["controller"]=>  string(5) "pages"
["action"]=>  &string(7) "display"
["form"]=>  array(0) { }
["url"]=>  array(1) { ["url"]=>  string(13) "pages/anfahrt" }
["models"]=>  array(0) { }
}
Tagged mit:
Jan 31

Mit Hilfe des im Core enthalten Pages_Controller ist es möglich, die verschiedenen Helper auch für die statischen Seiten in der Anwendung einzubinden.

Wichtig ist, dass keine Änderungen im Core vorgenommen werden sollten, so dass man CakePHP auch weiterhin updaten kann.

Also einfach den Pages_Controller aus cake/libs/controller kopieren und in app/controller einfügen. Wenn CakePHP den Pages_Controller dort findet, wird auf diesen zurückgegriffen.

Nun kann man hier z.B. standardmäßig den Javascript und Ajax Helper einbinden.

/**
 * Default helper
 *
 * @var array
 * @access public
 */
	var $helpers = array('Html', 'Javascript', 'Ajax');
Tagged mit:
Jan 20

Bestimmt nicht, aber der Chefentwickler von CakePHP hat sich von CakePHP getrennt und ein eigenes neues Rapid Developement Framework gestartet: Lithium. Lithium wird für PHP 5.3 entwickelt, befindet sich zur Zeit auch noch wirklich in der Entwicklungsphase. Ein kurzer (englischer) Artikel schreibt etwas mehr über Lithium. Die Lithium Projekt-Seite gibt es hier zu finden.

Tagged mit:
Jan 16

Der vorherige Artikel über die Versionsverwaltung git trifft sich ganz gut, da auch CakePHP nun dieses Tool verwendet. Subversion (das alte Versionsverwaltunswerkzeug) wurde für die Entwicklung von 1.3 und 2.0 durch git abgelöst.Mittels des github verwaltet CakePHP nun die Quellcodes.

Tagged mit:
Dez 21

Zwar ist das Interview schon von Juli, ich habe es aber erst gerade entdeckt. Felix Geisendörfer führte es mit Nate Abele (dem Chef-Entwickler von CakePHP 3.0) , um mehr Informationen für die Öffentlichkeit zu bekommen. Hier ist der Link dazu!

Tagged mit:
Dez 12

Das CSS-Framework YAML erleichtert das Erstellen von Webseiten im Bereich Layout und Design. So wie CakePHP dem Entwickler die gängisten und teilweise nervigen immer wiederkehrenden Aufgaben abnimmt, macht YAML im Prinzip das Gleiche – nur eben mit CSS. Was liegt näher, als beide Frameworks miteinander zu kombinieren bzw. YAML in CakePHP zu integrieren? Hier eine Kurzanleitung, wie YAML in CakePHP integriert werden kann:

  1. Das YAML Download Paket von dieser Seite runterladen (zum aktuellen Zeitpunkt V3.2)
  2. Das Paket in einen beliebigen Ordner entpacken.
  3. Im Ordner “yaml” befinden sich zwei Dateien (central_draft.css und markup_draft.html) sowie mehrere Ordner.
  4. Der gesamte Inhalt von yaml muss kopiert und in das css Verzeichnis von CakePHP (app/webroot/css/) eingefügt werden.

Prinzipiell wars das schon. Jedoch muss natürlich ein Design her und die Pfade müssen noch gesetzt werden. Daher Folgendes durchführen:

  1. Am besten den YAML Builder nutzen. Das ist ein “Almost WYSIWYG” CSS-Editor, quasi ein “AWYSIWYG for CSS“.
  2. Dann erstmal viel Spaß beim Gestalten des Layouts der Seite, der YAML Builder ist selbsterklärend.
  3. Nach einem Klick auf “Get Code” im YAML Builder bekommt man die notwendigen CSS Dateien.
  4. Der Inhalt von basemode.css muss kopiert und in eine basemod.css Datei im Ordner screen in app/webroot/css/screen abgelegt werden.
  5. Die CSS Patches für den Internet Explorer von patch_my_layout.css müssen ebenfalls kopiert und in eine patch_my_layout.css Datei im Ordner patches in app/webroot/css/patches abgelegt werden.
  6. Den (X)HTML Code vom YAML Builder am besten in die default.ctp von CakePHP in app/views/layout kopieren. Dies muss man so nicht machen, aber dann bekommt man erstmal ein Gefühl, wie sich YAML und CakePHP miteinder verbinden.
  7. In der default.ctp muss nun der folgende Teil

    durch folgenden Teil ersetzt werden.

          < ?php echo $html->css(‘central_draft’);? >
          
          < ?php echo $html->css(‘patches/patch_my_layout’);? >
          

    Anmerkung: Das Leerzeichen zwischen < und ? sowie zwischen ? und > muss natürlich weg. Das Code-Plugin für Wordpress verschluckt sonst jedoch das gesamte < ?php und ? >.

    Es wurden nun gemäß CakePHP Konventionen, die CSS Dateien eingebunden.

    Abschließend müssen noch kleine Pfadänderungen in der central_draft.css in app/webroot/css gemacht werden. Die Datei sollte den folgenden Code enthalten:

    /* import core styles | Basis-Stylesheets einbinden */
    @import url(core/base.css);
    
    /* import screen layout | Screen-Layout einbinden */
     @import url(navigation/nav_shinybuttons.css);
     @import url(screen/basemod.css);
     @import url(screen/content.css); 
    
    /* import print layout | Druck-Layout einbinden */
    /* @import url(print/print_003.css); */

    Anmerkung: Schön auf die /* Kommentare */ aufpassen, nicht dass eine Datei dadurch nicht importiert wird.

Jetzt müssen natürlich noch die obligatorischen CakePHP Zeilen wie

$session->flash();
$session->flash('auth');
echo $content_for_layout;

hinzugefügt werden!

Das war’s auch schon. Viel Spaß weiterhin mit CakePHP und diesmal auch mit YAML.

Tagged mit:
Dez 05

Bei CakePHP kommen für die Views die *.ctp Dateien zum Einsatz. Damit diese auch entsprechend in Eclipse gehighlighted werden können, muss unsere Entwicklungsumgebung leicht angepasst werden. Es ist ganz simpel – wenn man weiß wo man etwas ändern muss. Folgende Schritte gelten für Eclipse 3.3.2 (english)

  • Eclipse starten und unter “Window” -> “Preferences” auswählen.
  • Im Tab “General”, den Tab “Content Types” auswählen.
  • Im rechten Fenster den Tab “Text” öffnen und “PHP Content Type” auswählen.
  • ImFenster darunter werden nun alle mit PHP verknüpften Dateien angezeigt.
  • Hier muss nun durch einen Klick auf  “Add” die Endung “.ctp” hinzugefügt werden.

Nun werden auch die *.ctp Dateien schön bunt dargestellt und der Entwickler behält den Überblick.

Tagged mit:
Nov 23

Spielereien sind mit dem neuen Release von CakePHP 1.3.0 alpha natürlich möglich. Wer jedoch den Backofen nutzen möchte und damit die bake shell, sollte weiterhin auf die Stable-Version 1.2.5 setzen.

Bei 1.3.0 alpha funktioniert bake nicht wie es soll, da einige Klassen in der (neuen) Alpha-Version woanders auftauchen als es bislang der Fall war.

Typische Fehlermeldung: “ConnectionManager” not found (oder ähnlich)

Daher: Für den vollen Cake Genuß die Stable-Version nutzen.

Tagged mit:
Nov 22

Mit bake wird dem Programmierer bei CakePHP noch mehr Arbeit abgenommen. Es können dadurch automatisch Models, Controllers und Views erstellt werden. bake wird über die Konsole (Eingabeaufforderung) gesteuert. Dazu muss das Programm jedoch erst einmal dem System bekannt gemacht werden. Hier eine kurze Anleitung dazu:

  • Start -> Systemsteuerung -> System
  • Reiter “Erweitert” auswählen
  • Button “Umgebungsvariablen” klicken
  • Unter “Systemvariablen” den Eintrag “Path” suchen
  • Button “Bearbeiten” klicken
  • Ans Ende der Zeile (Vorsicht: Erst ein Seminkolon setzen) den Pfad zum Ordner “console” eintragen
    Beispiel: “C:\Programme\xampp\htdocs\webseite\cake\console”
  • Alle geöffneten Fenster wieder schließen
  • Die Konsole (Eingabeaufforderung) öffnen, durch Start -> Ausführen
  • “cmd” eintragen und “OK” klicken
  • Zum Ordner der CakePHP Anwendung navigieren (hier “webseite”)
  • “cake bake” eingeben und schon kann gebacken werden…

Weitere Informationen, wie dann was zu backen ist, kann auf den Seiten von CakePHP nachgelesen werden.

Tagged mit:
Nov 21

XAMPP simuliert einen Apache-Webserver und bringt auch gleich noch eine MySQL-Datenbank mit. CakePHP kann natürlich zu der lokalen Datenbank eine Verbindung herstellen. Dazu muss – wie auch bei einer Verbindung zu einer Datenbank die irgendwo im Server-Nirvana liegt – die Datei database.php im Ordner app/config/ angepasst werden.


var $default = array(
'driver' => 'mysql',
'persistent' => false,
'host' => 'localhost',
'login' => 'root',
'password' => 'passwort',
'database' => 'datenbankname',
'prefix' => '',
);

Doch wie ist das Passwort für die lokale Datenbankinstallation? Antwort darauf gibt die Datei config.inc.php im Ordner phpMyAdmin der XAMPP Installation. Dort sind die folgenden Zeilen zu finden:


$cfg['Servers'][$i]['auth_type']     = 'http';
$cfg['Servers'][$i]['user']          = 'root';
$cfg['Servers'][$i]['password']      = 'root';

Das Passwort kann hier direkt geändert werden. Vorsicht: Aus Sicherheitsgründen, sollte der auth_type nicht auf config stehen, sondern auf http. Wenn der Rechner nicht am Netz hängt, kann die Sicherheit vernachlässigt werden.

Tagged mit:
Nov 21

… sollte – so möge man denken – auch über den Form-Helper in CakePHP definiert werden. Dass dies nicht funktioniert und auch nicht sinnvoll ist, soll der kurze Artikel verdeutlichen.

Innerhalb der Methode input können neben dem Namen des Feldes verschiedene Optionen innerhalb eines Arrays für die Eigenschaften angegeben werden. Mit maxLength zum Beispiel wird die maximale Anzahl an Buchstaben angegeben, die im Inputfeld erlaubt sind.

$form->input('name', array('maxLength' => '50'));

Eine Aussage zur Größe (zur Breite) des Feldes wird damit natürlich nicht festgelegt. Nun könnte man denken, dass mit einer Option “size” genau das erreicht wird. Ein Blick ins Manual von CakePHP zeigt jedoch, dass diese Option nicht existiert. (im Gegensatz zu der Meinung, die in diesem Post auf Nabble publiziert wird)

Und das ist auch gut so! Denn: Die Größe eines Inputfeldes ist natürlich ein Formatierungsproblem. Layout und Struktur sollten selbstverständlich weiterhin getrennt bleiben, weshalb die Größe eines Inputfeldes in einer CSS-Definition angegeben werden sollte.

Wer also zu Beginn mit der Standard CSS-Datei cake.generic.css arbeitet, der muss in dieser Datei die Angabe für die Größe (in diesem Beispiel vom Standard width:100% auf width:20% reduziert) der Inputfelder ändern.

input, textarea {
	clear: both;
	display: block;
	font-size: 140%;
	font-family: "frutiger linotype", "lucida grande", "verdana", sans-serif;
	padding: 2px;
	width: 20%;
}
Tagged mit:
preload preload preload