7

さまざまな文字列を日付に変更するヘルパーがあります。これにより、+5 は 2012-11-17 (今日から 5 日) になり、5 は 2012-11-05 (今年、今月、特定の日) になります。

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

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

このコードはうまく機能しますが、より良い/より簡単な方法があるかどうか知りたいです。

4

1 に答える 1

10

ええ、あります。助っ人にしないで!

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

したがって、それをlibクラスなどにして、このようにコントローラーで使用します。ヘルパーで同じライブラリを使用するか、ラッパー ヘルパー (String の 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 はユーザーが定義できます (例: "効用")。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 クラスに対しても Cake が行う方法です (詳細についてはコードを参照してください)。

于 2012-11-12T15:58:53.180 に答える