2012-11-12 14 views
7

私は、異なる文字列を日付に変更するヘルパーを持っています。これで+5は2012-11-17(今日から5日)になり、5は2012-11-05(今年、今月、与えられた日)になります。コントローラでcakephpヘルパーを使用する

コントローラで同じことを使用したいと思います。

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

このコードはうまく動作しますが、私は行うには良い/簡単な方法があるかどうかを知りたいです。

+1

cakephpのバージョンを指定していませんでした。 – mark

+0

これはcakephpです2.2.3 – rrd

答えて

10

はい、あります。 それを助けにしないでください!

ヘルパーは、ビューレベルでのみ設計されています。 コントローラで必要な場合は、設計が間違っています。

これをlibクラスなどにして、このようにコントローラで使用します。 と同じヘルパーでlibを使用するか、ラッパーヘルパー(文字列の場合はTextHelper、CakeNumberの場合はNumberHelper、CakeTimeの場合はTimeHelperなど)を使用して、ビュースコープのメソッドに簡単にアクセスします。より複雑なソリューションについては

は、セッションを見てみましょう:

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

のLib「DateLib」について(あなたは何でもあなたのように長いクラス名はアプリとコア全体でユニークであるとのような、それに名前を付けることができます): /Lib /または/ Lib/PackageNameに入れてください。一方、PackageNameはあなたが定義することができます(例: "Utility")。 Libに直接入れるのではなく、PackageNameでグループ化する方がよいでしょう。

/Lib/Utility/DateLib.php 

そして、あなたのコード内:

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

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

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

あなたは、あなたがすべき静的メソッドで作業することができます。これはケーキがCakeTime、CakeNumber、およびStringクラス(詳細はコードを参照)のためにそれを行う方法でもあります。

+0

私はこれを調べます。私はそれが私が必要とするものだと思う。 – rrd

+0

libクラスはどこに置くべきですか? – rrd

+0

私の回答を更新しました – mark

関連する問題