2012-11-12 32 views
7

Tôi có một trình trợ giúp thay đổi các chuỗi khác nhau cho đến ngày. Bằng cách này +5 trở thành 2012-11-17 (5 ngày kể từ hôm nay), 5 trở thành 2012-11-05 (năm nay, tháng này, ngày cụ thể).sử dụng helper cakephp trong bộ điều khiển

Tôi muốn sử dụng cùng một điều trong bộ điều khiển của mình.

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

Mã này hoạt động tốt, nhưng tôi muốn biết nếu có cách nào tốt hơn/đơn giản hơn để thực hiện.

+1

bạn không chỉ định phiên bản CakePHP của mình! – mark

+0

Nó là cakephp 2.2.3 – rrd

Trả lời

10

Có, có. Đừng biến nó thành người trợ giúp!

Người trợ giúp chỉ được thiết kế cho cấp chế độ xem. Nếu bạn cần nó trong một bộ điều khiển, thiết kế của bạn là sai.

Vì vậy, hãy biến nó thành lớp lib ... và sử dụng nó trong bộ điều khiển theo cách này. và sử dụng cùng một lib trong trình trợ giúp của bạn hoặc tạo trình trợ giúp trình bao bọc (tương tự như TextHelper cho String, NumberHelper cho CakeNumber, TimeHelper cho CakeTime v.v.) để dễ dàng truy cập các phương thức trong phạm vi xem của bạn.

Đối với các giải pháp phức tạp hơn hãy nhìn vào Sessions:

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

Đối với một Lib "DateLib" (bạn có thể đặt tên cho nó bất cứ điều gì bạn thích miễn là tên lớp là duy nhất trong suốt ứng dụng và core): Hoặc đặt nó vào/Lib/hoặc/Lib/PackageName trong khi PackageName có thể được định nghĩa bởi bạn (ví dụ "Tiện ích"). Nó là tốt hơn để nhóm bởi PackageName thay vì đặt nó trong Lib trực tiếp.

/Lib/Utility/DateLib.php 

Và trong mã của bạn:

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

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

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

nếu bạn có thể làm việc với các phương pháp tĩnh bạn nên. đây cũng là cách làm bánh cho các lớp CakeTime, CakeNumber và String (xem mã để biết chi tiết).

+0

Tôi sẽ xem xét điều này. Tôi nghĩ đó là những gì tôi cần. – rrd

+0

Tôi nên đặt lớp học lib ở đâu? – rrd

+0

Tôi đã cập nhật câu trả lời của mình – mark

Các vấn đề liên quan