2009-09-26 25 views
6

Tôi đang tạo biểu mẫu liên hệ để gửi email đến địa chỉ được chỉ định. Tôi đang cố gắng sử dụng xác thực mô hình CakePHP và vì tôi không cần một bảng cho mô hình liên hệ, tôi đã đặt useTable thành false trong mô hình liên hệ. Tuy nhiên, tôi đang gặp lỗi trong chức năng điều khiển thực hiện việc gửi. Lỗi này làCakePHP yêu cầu bảng mô hình mặc dù useTable = false

Missing Database Table Error: Database table contacts for model Contact was not found.

trỏ đến dòng mà làm cho các cuộc gọi đầu tiên đến $ this-> Liên hệ:

$this->Contact->validates($this->data);

Tôi nghĩ đây là tất cả tốt để đi với khuôn khổ CakePHP. Tại sao tôi sai?

Trả lời

7

Sửa: Xem this answer (và comment) cho CakePHP 2.x (file mô hình nên được gọi là Contact.php)


CakePHP 1.x - Xác minh rằng mô hình tập tin của bạn được gọi contact.php (chữ thường). Nếu không, CakePHP sẽ không tìm thấy mô hình của bạn và thay vào đó sẽ tạo một "autoModel" trên thời gian chạy được gọi là Contact sử dụng bảng contacts.

+1

wowsers. tôi đã đi qua đó một vài lần bản thân mình, không cho đến bây giờ nhận ra tôi đặt tên nó contact.ctp ra khỏi xem thói quen tạo ra. tôi cảm thấy như một kẻ ngốc nghếch. – Adam

+0

hehe, tất cả chúng ta đã ở đó. một điều khiến tôi khá tốt một lần là 'actAs' vs 'actAs', giờ lãng phí. – deizel

2

Nếu bộ nhớ phục vụ, bạn không thực sự thiết lập mô hình của bạn:

$this->Contact->set($this->data); 
$this->Contact->validates(); 

Trong code của bạn, mô hình được không thực sự dân cư khi bạn cố gắng để xác nhận nó.

2

Nếu bạn đang sử dụng một mô hình mà không có một bảng bạn cũng cần phải thiết lập một sơ đồ ví dụ

class Contact extends AppModel { 
    var $name = 'Contact'; 
    var $useTable = false; 
    var $_schema = array(
     'name' => array('type' => 'string', 'length' => 255), 
     'email' => array('type' => 'string', 'length' => 255), 
     'message' => array('type' => 'text') 
    ); 
} 
1

Nếu nó giúp mọi người, tôi thấy rằng nếu tôi có

var $uses = 'ModelName'; 

trong bộ điều khiển của tôi, nó sẽ ghi đè lên useTable. Loại bỏ nó nếu bạn không cần nó.

2

Hai điều tạo nên sự khác biệt đối với tôi - thay đổi tên tệp của mô hình thành Contact.php (thay vì ContactModel.php) và nhận xét var $uses = 'Contact'; trong ContactController.php của tôi.

Ngoài ra, nhiều hướng dẫn ở đó cho biểu mẫu liên hệ là dành cho các phiên bản CakePHP trước đó. Hãy chắc chắn sử dụng cấu trúc đầu vào biểu mẫu chính xác. Đây là chế độ xem của tôi trong Bánh 2.1:

<?php 
    echo $this->Form->create('Contact'); 
    echo $this->Form->inputs(); 
    echo $this->Form->end('Send'); 

?> 
+0

đây là một 2.x một, cũng như: http://www.dereuromark.de/2011/12/15/tools-plugin-part-2-contact-form/ - sử dụng một lược đồ – mark

+0

Cảm ơn rất nhiều cho mẹo đổi tên SomethingModel.php thành Something.php. Tôi đã có chính xác cùng một vấn đề và đã được về để đi tìm nguồn gốc của vấn đề của tôi :-) – andzep

+0

Tôi đã có cùng một vấn đề này, nhưng tôi chỉ vô tình cố định nó trước khi đọc giải pháp này. – MjrKusanagi

4

Đây là kết quả hàng đầu cho tìm kiếm nhưng thông tin đã lỗi thời.

Trong CakePHP 2.0+ bạn cần phải thiết lập $useTable = false; trong mô hình, tên model sử dụng propercase (vì vậy nó phải được Contact và không contact như đề xuất) và bộ điều khiển phải có $uses = 'Contact'; hoặc $uses = array('Contact'); hoặc bánh tạo ra đặc tính mô hình mặc định và cố gắng để tải bảng không tồn tại. Vì vậy, cả hai thứ này phải được thiết lập để nó hoạt động.

+0

Giống như trong câu trả lời @deizel, hãy xác minh rằng tệp mô hình của bạn được gọi là Contact.php (chữ hoa trong CakePHP 2.x). Nếu không, CakePHP sẽ không tìm thấy mô hình của bạn và bất kỳ định nghĩa bảng duy nhất nào của bạn bằng cách sử dụng $ useTable. – zmonteca

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