Tôi đã đưa ra một "giải pháp" (Tôi tìm cách tiếp cận bẩn, nhưng nó hoạt động) cho một different question (rất giống với điều này). Đó là câu hỏi khác làm việc với các yếu tố và quan điểm, mặc dù. Tôi sẽ đăng toàn bộ giải pháp ở đây để xem liệu nó có giúp ai đó không (mặc dù tôi thích một người khác đi kèm với một cách tiếp cận khác).
Vì vậy, trước tiên: thay đổi tên tạo cho hai biểu mẫu.
//for the registration
<?php echo $this->Form->create('Registration',
array('url' => array('controller' => 'users', 'action' => 'add'))); ?>
//for the login
<?php echo $this->Form->create('Login',
array('controller' => 'users', 'action' => 'login'))?>
Các biểu mẫu sẽ hoạt động, xem và đăng lên các hành động tương tự, vì vậy không có hại gì.
Bước thứ hai: Tôi không có mã hành động của bạn, vì vậy tôi sẽ giải thích những gì cần phải được thực hiện trong chung
public function login() {
if ($this->request->is('post')) {
//we need to change the request->data indexes to make everything work
if (isset($this->request->data['Login'] /*that's the name we gave to the form*/)) {
$this->request->data['User'] = $this->request->data['Login'];
unset($this->request->data['Login']); //clean everything up so all work as it is working now
$this->set('formName', 'Login'); //we need to pass a reference to the view for validation display
} //if there's no 'Login' index, we can assume the request came the normal way
//your code that should work normally
}
}
điều tương tự cho việc đăng ký (chỉ cần thay đổi 'Đăng nhập' để 'Đăng ký').
Bây giờ, các hành động sẽ hoạt động bình thường, vì không có ý tưởng chúng tôi đã thay đổi tên biểu mẫu trên chế độ xem (chúng tôi đảm bảo rằng việc thay đổi các chỉ mục trong hành động). Nhưng, nếu có lỗi xác nhận, quan điểm sẽ kiểm tra chúng trong
$this->validationErrors['Model_with_errors']
Và đó 'Model_with_errors' (trong trường hợp này 'Người dùng') sẽ không được hiển thị trong các hình thức tương ứng vì chúng tôi đã đã đổi tên. Vì vậy, chúng tôi cũng cần chỉnh sửa chế độ xem. Oh! Tôi giả sử cả hai dạng này đều có dạng xem là index.ctp
, nhưng nếu chúng ở trên các tệp riêng biệt (nếu bạn đang sử dụng phần tử hoặc tương tự), tôi khuyên bạn nên thêm dòng mã cho tất cả các tệp
//preferably in the first line of the view/element (index.ctp in this example)
if (!empty($this->validationErrors['User']) && isset($formName)) {
$this->validationErrors[$formName] = $this->validationErrors['User'];
}
Với điều đó, chúng tôi sao chép xác thực mô hình của Người dùng thành biểu mẫu giả mạo và chỉ có biểu mẫu đó. Lưu ý rằng nếu bạn có biểu mẫu thứ ba trong chế độ xem đó cho cùng một mô hình và bạn sử dụng $this->form->create('User')
điển hình thì lỗi xác thực cũng sẽ hiển thị cho mô hình đó trừ khi bạn thay đổi tên biểu mẫu cho cái thứ ba đó.
Thực hiện việc đó và chỉ xác thực biểu mẫu có tên chính xác.
Tôi thấy đây là một cách tiếp cận lộn xộn vì nó liên quan đến thay đổi chế độ xem bộ điều khiển. Tôi nghĩ tất cả mọi thứ nên được thực hiện bởi bộ điều khiển, và xem không nên chớp mắt về vấn đề xác nhận ... Vấn đề với chức năng render
của Controller.php
cần phải được thay thế ... Nó có thể được thực hiện trong AppController
, nhưng đối với mỗi lần cập nhật Cakephp, bạn sẽ phải cẩn thận khi sao chép hàm render mới của Controller.php
sang hàm thay thế nó trong AppController
. Tuy nhiên, lợi thế của phương pháp đó là "tính năng" sẽ có sẵn cho mọi biểu mẫu mà không phải lo lắng về việc thay đổi chế độ xem.
Vâng, dù sao cũng không thể duy trì được, tốt hơn là nên để nó một mình nếu nó chỉ dành cho trường hợp này ... Nếu có ai quan tâm đến cách xử lý điều này chỉ ở phía bộ điều khiển, bình luận và tôi ' sẽ đăng nó.
Tôi cũng gặp vấn đề tương tự. Bạn có tìm thấy giải pháp cho vấn đề này không? – gonzo
Không tìm thấy giải pháp nào –
cách giải quyết vấn đề này. Xin hãy giúp tôi –