2012-11-12 18 views
7

Ich habe einen Helfer, die verschiedene Zeichenfolgen zu Daten ändern. Dadurch wird +5 zu 2012-11-17 (5 Tage ab heute), 5 wird 2012-11-05 (dieses Jahr, diesen Monat, gegebener Tag).Verwenden Sie Cakephp Helfer in Controller

Ich möchte das gleiche in meinem Controller verwenden.

App::uses('EasyDateHelper', 'View/Helper'); 
App::uses('View', 'View'); 
$this->View = new View($this->Controller); 
$easyDate = new EasyDateHelper($this->View); 

Dieser Code funktioniert gut, aber ich würde gerne wissen, ob es einen besseren/einfacheren Weg zu tun gibt.

+1

Sie haben Ihre CakePHP-Version nicht angegeben! – mark

+0

Es ist cakephp 2.2.3 – rrd

Antwort

10

Ja, gibt es. Machen Sie es nicht zu einem Helfer!

Helfer sind nur für die Ansichtsebene vorgesehen. Wenn Sie es in einem Controller benötigen, ist Ihr Design falsch.

Also machen Sie es zu einer Lib-Klasse usw. und verwenden Sie es in Ihren Controllern auf diese Weise. und verwenden Sie entweder die gleiche Lib in Ihren Helfern oder einen Wrapper-Helfer (ähnlich wie TextHelper für String, NumberHelper für CakeNumber, TimeHelper für CakeTime usw.), um einfach auf die Methoden in Ihrem Ansichtsbereich zuzugreifen.

Für komplexere Lösungen zu sehen, Sessions:

CakeSession is the lib class. 
SessionComponent wraps it for the controller layer 
SessionHelper wraps it for the view layer 

Für eine Lib „DateLib“ (Sie nennen es können, was Sie wollen, solange der Klassenname im gesamten App und Kern einzigartig ist): Entweder in/Lib/oder/Lib/PackageName, während PackageName von Ihnen definiert werden kann (zB "Utility"). Es ist besser, nach PackageName zu gruppieren, anstatt es direkt in Lib zu platzieren.

/Lib/Utility/DateLib.php 

Und in Ihrem Code:

App::uses('DateLib', 'Utility'); 

$date = DateLib::format(); // for static methods 

$DateLib = new DateLib(); 
$date = $DateLib->format(); // creating an extra object here 

, wenn Sie mit statischen Methoden arbeiten können, sollten Sie. Dies ist auch der Weg, den es für die Klassen CakeTime, CakeNumber und String macht (siehe Code für Details).

+0

Ich werde das untersuchen. Ich denke, das ist was ich brauche. – rrd

+0

Wo sollte ich meine Lib-Klasse setzen? – rrd

+0

Ich habe meine Antwort aktualisiert – mark

Verwandte Themen