Feb
25

Shellprogrammierung mit CakePHP

Wer bei CakePHP einsteigt fängt möglicherweise mit der Generierung über die Cake Console an. CakePHP verfügt nämlich über einige Befehle, die ganze Anwendungen erzeugen können. Scaffolding, Bake und die Console sind die Stichworte und vieles davon kann im Handbuch nachgelesen werden. Lohnt auf jeden Fall.
Für eine aktuelle Anwendung habe ich ebenfalls mit Shell-Scripten gearbeitet. Allerdings setzt es voraus, dass man die Möglichkeit hat, Cronjobs aufzusetzen. Ist also mit einfacheren Webspace-Angeboten meist nicht zu realisieren. Wenn man aber die Möglichkeit hat, lohnt es auf jeden Fall darüber nachzudenken, welche Aufgaben einer Anwendung im Hintergrund ablaufen könnten. Bei Anwendunge beispielsweise könnte der Versand der Benachrichtungsmail auch kurze Zeit später erfolgen. Somit kann die Webanwendung im Vordergrund von dieser Aufgabe entlastet werden.
In Cake Shellanwendungen hat man Zugriff auf Models und kann also prima Daten aus der Datenbank auslesen und somit die Emails für den Versand entsprechend versenden, wenn die Markierungen in der Datenbank sind.

class NotificationShell extends Shell
{
    var $User = null;
 
     function main() {
            $this->User = ClassRegistry::init('User');
            $data = $this->User->find('all');
            // $data verarbeiten
     }
}

Genauso einfach wie man Models instanzieren kann, lassen sich auch Komponenten laden und benutzen, wie beispielsweise die TwitterComponent.

        if (is_null($this->Twitter)) {
            App::import('Component', 'Twitter');
            $this->Twitter = new TwitterComponent();
 
            $this->Twitter->username = 'twittername';
            $this->Twitter->password = 'meinPasswort';
       }

Cake Shellscripte werden dann einfach über den cake Befehl in der Form

     cake notification

aufgerufen. Das Shell-Script wird in APP/vendors/shells angelegt und bekommt den gleichen Namen wie die Shell. Also im obigen Beispiel wird die NotificationShell in der Datei notification.php angelegt.

Jan
31

Eigene Vorlagen für Scaffolding und von Bake erzeugte Views

Scaffolding ist ja CakePHP Programmierung für ganz Faule. Naja, nicht nur, weil man damit ja schon recht einfach und vorallem schnell die notwendigen Dateien für Model, Controller und auch die Views erzeugen kann. Aber es geht natürlich auch mit

1
    var $scaffold;

das Scaffolding zu nutzen. CakePHP erzeugt dann keine Views oder sondern nutzt die zur Verfügung gestellten Vorlagen.

Genau um die Vorlagen gehts in dem Posting von teknoid, der das wohl von Mark Story im IRC-Chat aufgeschnappt hat.

Hier die Tipps zum Nachvollziehen:

Kopiere auf dem Verzeichnis cake/libs/view/scaffolds die Dateien für die entsprechenden Views - also

edit.ctp
index.ctp
view.ctp

ins eigene app/views/scaffolds Verzeichnis. Dabei wird übrigens für add und edit beidesmal edit.ctp eingesetzt. In app/views/scaffolds können die Views jetzt beliebig angepasst werden, bis sie euch gefallen.

Wenn man sich allerdings von der cake console mit Hilfe von bake die Views erzeugen lässt, dann macht man sich auch Kopien und zwar aus cake/console/libs/templates/views werden die Dateien

form.ctp
home.ctp
index.ctp
view.ctp

nach app/vendors/shells/templates/views kopiert und können dort einfach wieder verändert werden. Achtung das Verzeichnis views muss wohl erst noch erstellt werden. Also nicht wundern.

So und nun happy baking.

Oben