đơn giản trả lời
Đối với các chức năng phổ biến trên ứng dụng của bạn, thêm một Lib hoặc lớp Utility.
app/Lib/MyClass.php
class MyClass {
public static function usaStateList() {
// ...
}
}
Sau đó thêm này ở phía trên cùng của tập tin nào bạn muốn truy cập vào các chức năng:
App::uses('MyClass', 'Lib');
Và gọi chức năng của bạn bất cứ nơi nào bạn thích :
$myClass = new MyClass();
$states = $myClass::usaStateList();
Better trả lời
Có vẻ với tôi như vấn đề cụ thể của bạn là bạn muốn có thể để có được một danh sách các tiểu bang Hoa Kỳ trong cả hai điều khiển của bạn và xem bạn. Cách tốt nhất để làm điều này là có một bảng cơ sở dữ liệu của các tiểu bang Hoa Kỳ.
Tạo bảng trong cơ sở dữ liệu của bạn được gọi là us_states.
Ví dụ SQL:
CREATE TABLE `us_states` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(20) NOT NULL,
`abbreviation` CHAR(2) NOT NULL
) ENGINE = MYISAM
Chèn tất cả các tiểu bang như dữ liệu trong bảng đó. Bạn có thể tìm thấy các bãi chứa SQL trên Internet đã có sẵn cho bạn (ví dụ: Like this one).
Tạo mô hình USState trong CakePHP.
/**
* Model for US States
*
* @package app.Model
*/
class UsState extends AppModel {
/**
* Default sort order
*
* @var string|array
*/
public $order = 'UsState.name';
}
gì bạn có thể làm là truy cập vào các tiểu bang từ điều khiển của bạn chỉ bằng cách sử dụng mô hình.
/**
* Your Controller
*
* @package app.Controller
*/
class YourController extends AppController {
public function index() {
// Get a list of US states
$this->loadModel('UsState');
$states = $this->UsState->find('all');
}
}
Và nếu bạn muốn truy cập các trạng thái đó trong Chế độ xem, bạn nên chuyển dữ liệu đó như bình thường với bất kỳ biến nào khác.
Tôi tưởng tượng bạn muốn làm điều đó để có thể có một thực đơn lựa chọn các tiểu bang của Hoa Kỳ.
public function index() {
// Get a list of US states
$this->loadModel('UsState');
$states = $this->UsState->find('all');
// Make the states into an array we can use for a select menu
$stateOptions = array();
foreach ($states as $state) {
$stateOptions[$state['id']] = $state['name'];
}
// Send the options to the View
$this->set(compact('stateOptions'));
}
Và theo quan điểm của bạn, bạn có thể hiển thị một menu chọn cho điều đó như thế này:
echo $this->Form->select('us_state_id', $stateOptions);
tôi đã nhận thấy upvotes sắp tới trong câu trả lời khá cũ của tôi và phát hiện tiền thưởng. Nó có thể không được rõ ràng, nhưng câu trả lời này đã được thêm vào lâu trước khi tiền thưởng, tức là nó không phải là một chi tiết, kinh điển mà @trante đang tìm kiếm (không chắc chắn chính xác những gì anh ta đang tìm kiếm). – ndm